Java 在Hibernate中将HQL与本机SQL混合时的数据库状态

Java 在Hibernate中将HQL与本机SQL混合时的数据库状态,java,sql,hibernate,Java,Sql,Hibernate,在我的数据库代码中,我使用了一些Hibernate原生SQL查询(插入、删除、更新)。我知道当我使用HQL并且缓存打开时,每当我使用HQL调用DB时,DB的状态都是稳定的。但是,我想知道如果我使用本机SQL查询会发生什么,例如,我插入一些数据(但不提交),然后尝试使用HQL查询获取一些数据。我也会得到插入的数据吗 有什么提示吗?我想说,这取决于底层数据库和事务设置。但即使是HQL也被转换为本机SQL并执行。只要保持在同一事务中,就可以通过HQL加载使用本机SQL所做的更改。但请记住,HQL查询与

在我的数据库代码中,我使用了一些Hibernate原生SQL查询(插入、删除、更新)。我知道当我使用HQL并且缓存打开时,每当我使用HQL调用DB时,DB的状态都是稳定的。但是,我想知道如果我使用本机SQL查询会发生什么,例如,我插入一些数据(但不提交),然后尝试使用HQL查询获取一些数据。我也会得到插入的数据吗


有什么提示吗?

我想说,这取决于底层数据库和事务设置。但即使是HQL也被转换为本机SQL并执行。只要保持在同一事务中,就可以通过HQL加载使用本机SQL所做的更改。但请记住,HQL查询与缓存、代理和其他hibernate内容相互作用-可能会有一些奇怪的问题,因为natiev SQL完全绕过了这一点(这是本机查询的目的-所有hibernate内容的快车道)

添加到Konstantin Pribluda的答案中,我可以说在相反的情况下:通过Hibernate添加数据(即使使用session.save()),然后使用本机SQL获取数据,导致本机SQL查询无法获取添加的数据


因此,当在DAO中使用不同类型的查询时,我总是在使用本机SQL查询之前先刷新会话。。。永远不知道哪种方法会在服务层混合使用。

是的,您会得到它,因为无论是HQL还是SQL,所有DAO查询都会逐个执行。所以,若按顺序插入查询,那个么您将得到插入的记录