在我的数据库代码中,我使用了一些Hibernate原生SQL查询(插入、删除、更新)。我知道,当我使用HQL并且缓存打开时,每当我使用HQL调用数据库时,数据库的状态都是稳定的。然而,我想知道如果我使用原生SQL查询会发生什么,例如,我插入一些数据(但不提交它),然后我尝试使用HQL查询来获取一些数据。我也会得到插入的数据吗?
有什么提示吗?
发布于 2011-11-04 17:07:00
我想说的是,这取决于底层的数据库和事务设置。但即使是HQL也会被转换成原生SQL并执行。只要您停留在同一事务中,您就能够通过HQL加载使用原生SQL所做的更改。但请记住,HQL查询与缓存、代理和其他hibernate内容相关-可能会有一些奇怪的问题,因为natiev SQL完全绕过了这一点(这是原生查询的目的-绕过所有hibernate内容的快速通道)
发布于 2013-10-20 22:21:49
除了Konstantin Pribluda的回答,我可以说在相反的情况下:通过Hibernate添加数据(即使是使用session.save()),然后使用原生SQL获取数据会导致原生SQL查询不获取添加的数据。
因此,当在DAO中使用不同类型的查询时,我总是在使用原生SQL查询之前先刷新会话...永远不会知道在服务层中混合了哪种方法。
发布于 2013-10-21 02:12:58
是的,你会得到它,因为你所有的DAO查询都会一个接一个地执行,不管是HQL还是SQL。因此,如果insert query是第一个顺序,那么您将获得插入的记录。
https://stackoverflow.com/questions/8006867
复制相似问题