问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

entityManager来主键查找类和entityManager.createQuery的区别

发布网友 发布时间:2022-04-10 08:48

我来回答

2个回答

懂视网 时间:2022-04-10 13:09

    前者用的hql语句进行查询,后者可以用sql语句查询,前者以hibernate生成的Bean(实体类)为对象装入list返回,后者则是以对象数组进行存储;

    createSQLQuery有这样一个方法可以直接转换对象Query query = session.createSQLQuery(sql).addEntity(XXXXXXX.class);XXXXXXX 代表以hibernate生成的Bean的对象,也就是数据表映射出的Bean。

createQuery与createSQLQuery区别

标签:就是   返回   entity   存储   方法   实体类   session   对象数组   creat   

热心网友 时间:2022-04-10 10:17

  (1)首先看下代码:
  Java代码
  public Long getServerIdBypublishWebsiteId(Long id) {
  Site tempSite = entityManager.find(Site.class, id);
  // Long serverId = (Long)entityManager.createQuery("SELECT s.serverId FROM Site s WHERE s.id= "+id).getSingleResult();
  if (tempSite != null && tempSite.getServerId() != null) {
  return tempSite.getServerId();
  } else {
  return null;
  }
  }
  (2) Site tempSite = entityManager.find(Site.class, id);这种方式是通过主键来查找类的形式,一般情况下是这样用的。所以一般情况下如果知道主键的ID就应该先想到这种方式来查找类。
  (3) Long serverId = (Long)entityManager.createQuery("SELECT s.serverId FROM Site s WHERE s.id= "+id).getSingleResult();
这种查询方式不适合用于主键的查询。至少我就在此碰到了错误:
  Java代码
  错误场景的描述:
  我在site list的页面,当我点击delete的链接时,它删除成功了,但是页面却没有及时的更新即数据库中的这条记录已经删除了,而页面中这条记录还存在。所以当然啦这个主键的ID就依然存在。
  在删除这个数据之后它还会跳到本页面中,而这个时候(因为在本页面中它会去调用getServerIdBypublishWebsiteId这个方法),如果用Long serverId = (Long)entityManager.createQuery("SELECT s.serverId FROM Site s WHERE s.id= "+id).getSingleResult();这种形式的话,页面就会报错。
  原因在什么地方呢?
  此时的id是有值的,但是不要忘记了数据库中是没有值的,恰在此时你要去调用getSingleResult,这个肯定会报错啦。原因就是这个。
  但是如果用Site tempSite = entityManager.find(Site.class, id);的话,就不会报错,虽然这个id是有值的,但是它从数据库里一查找这个Site的对象却没有发现,所以tempSite就是个空值,这样就不会报错的在页面中。
  
  (4)所以以后如果有主键最好是想到那个find方法。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
橙子冷藏能保存多久 橙子会过期吗 新鲜橙子如何保存更久 橙子保鲜剂对人体有害吗 粒上皇开口熟栗120g*5袋(共600g)-详细介绍 三皇王板栗介绍 品牌榜:2024年板栗十大品牌排行榜 投票结果公布【新】 为什么来大姨妈胸会胀 少儿学什么舞蹈 青年学什么舞蹈好 甲鱼的苦胆可以和甲鱼一起炖吗? 甲鱼胆可以吃吗? 甲鱼可以和苦胆一起炖吗? 梦见班里毕业多年老同学和班主任一起聚餐 梦见朋友同学聚餐,父母缺席 技术咨询合同有哪些种类 无纺布中,晴纶的英文是怎样呢?缩写呢?AC又是什么呢?AC+PET是两个什么成分? 教师资格证认证时候登录的验证码 中考.pet纤维 主要成分 教师资格证注册时的验证码填什么 怎样找教师资格证验证码? 如何关闭苹果来信息是点亮屏幕 不小心把别人撞一下,应该说对不起还是不好意思? 说对不起的歌 不小心撞到别人应该道歉吗? 撞到别人,对别人说对不起有用吗? 有首歌的歌词里有一句”不要说,对不起“是什么歌 哪有一首歌曲的歌词是跟人说对不起的? 那故事中的人说了一句对不起是什么歌? “说对不起可能已回不去”是什么歌的歌词? 甲鱼血和胆汁能吃吗? 券商为什么一直不涨 券商板块为何如此弱势? 为什么机构最近出走券商 ,2021.04? 券商股为何这次反弹这么弱 我为什么这么不待见券商股 hibernateTemplate3.0中什么时候用find()方法 ,什么时候用createQuery()方法呢?它们之间的区别? 带山字旁的男孩名字十三画 皖安庆市望江县杨湾镇怎么交养老保险? 安庆望江县城乡养老保险什么时候交 查一下望江县今年缴职工养老保险交多少钱 广西省考2018行测一共多少题?110还是120?有没没常识判断? 结婚有什么意义? 广西玉林市乡镇公务员行测考什么 我的中间有一符号,现在输入怎么都搜索不到,找客服没人理,都 结婚的意义是什么 人到底为什么要结婚?结婚有什么意义呢? 广西公务员考试文学常识一题多少分 你认为结婚的意义何在? 广西公务员行测答题顺序是先易后难吗?