当前位置:首页>开发>正文

为什么我的hibernate查询语句,在查询结果出来之后还会去更新数据 Hibernate查询语句,请高手解释一下【200分】

2023-06-26 10:32:01 互联网 未知 开发

 为什么我的hibernate查询语句,在查询结果出来之后还会去更新数据 Hibernate查询语句,请高手解释一下【200分】

为什么我的hibernate查询语句,在查询结果出来之后还会去更新数据?

不是吃饱了撑得,这个hibernate管理对象的生命周期的必然结果。假如你要从数据库查询产品 1>首先new个product对象(此时改对象为瞬态 没有纳入session管理) 2>从数据库查询获得product (此时product为持久态 即在数据库中有,内存中有 被session所管理。hibernate后台所执行的语句就是 select produc from ...)。3>查询完毕,你会提交事务,执行session.getTransation.commit(其实这一步虽然你没显示的调用session.fush(),虚拟机也会自动调用,这样就是清理内存中的脏数据,将内存中的持久太对象保存到数据库 hibernate后台在这里执行了update product set name ...。product由持久太编程离线状态也成托管状态)。这里你的疑问就改明白了吧。实体对象的生命周期里,还有几种状态转换,自己好好看看吧。 hibernate这样设计自然是有他的好处--不用人工的进行脏数据检查,hibernate帮你做,免得疏忽大意导致对象没有持久化,有点类似于java虚拟机中的垃圾回收机制。

Hibernate查询语句,请高手解释一下【200分】

JPQL语句支持两种方式的参数定义方式: 命名参数和位置参数。。在同一个查询语句中只允许使用一种参数定义方式。

命令参数的格式为:“: 参数名”
例:
Query query = em.createQuery("select p from Person p where p.personid=:Id")
query.setParameter("Id",new Integer(1))

位置参数的格式为“? 位置编号”
例:
Query query = em.createQuery("select p from Person p where p.personid=?1")
query.setParameter(1,new Integer(1))

hibernate 的查询语句应该怎么写呢?

String hql="from Student stu WHERE name=?"

Query query=session.createQuery(hql)
query.setParameter(0, "张三")
Listlist=query.list() System.out.println(list)

最新文章