Java 可以混合使用session.save和依赖于该实体的各种HQL更新吗
我有一个带有会话参数的函数,它在hibernate中执行各种HQL查询和HQL update语句。它们创建的sql与许多表相冲突。一次交易中的所有功能 现在我要做的是在另一个函数中,使用session.save添加此函数所依赖的一个实体,然后调用第一个函数。我担心Hibernate在执行依赖于前者的HQL查询和更新之前不会导致与session.save(myentity)关联的SQL。会话中的某种缓存和语句的重新排序 安迪 我担心Hibernate在执行依赖于session.save(myentity)的HQL查询和更新之前不会导致与session.save关联的SQL 文档很好地解释了导致刷新的原因: 有时会话将执行 同步所需的SQL语句 JDBC连接的状态与 保存在内存中的对象的状态。这 该过程称为flush,由 默认设置为以下几点:Java 可以混合使用session.save和依赖于该实体的各种HQL更新吗,java,hibernate,orm,Java,Hibernate,Orm,我有一个带有会话参数的函数,它在hibernate中执行各种HQL查询和HQL update语句。它们创建的sql与许多表相冲突。一次交易中的所有功能 现在我要做的是在另一个函数中,使用session.save添加此函数所依赖的一个实体,然后调用第一个函数。我担心Hibernate在执行依赖于前者的HQL查询和更新之前不会导致与session.save(myentity)关联的SQL。会话中的某种缓存和语句的重新排序 安迪 我担心Hibernate在执行依赖于session.save(myent
- 在执行某些查询之前
- 从
org.hibernate.Transaction.commit()
- 从
Session.flush()
Session.save()保存
flush()
,
绝对没有保证
关于会话何时执行
JDBC调用,仅按
他们被处决了。然而,冬眠
是否保证
Query.list(..)
将永远不会返回
过时或不正确的数据
我不知道您的函数到底在做什么,以及按照什么顺序,但文档是明确的:如果需要,执行查询将触发刷新。我不确定这是否适用于(为什么我提到订单)。但是,如果您想确定,为什么不在保存后刷新呢?我会多次执行session.save(obj)、query1.list()、query2.executeUpdate()、query3.list()、query4.executeUpdate()。第一个query.list()取决于看到的session.save(),第二个query.list()取决于看到的query.executeUpdate()。