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

时间:2011-11-04 08:58:33

标签: java sql hibernate

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

任何提示?

3 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

是的,你会得到它,因为你的所有DAO查询都将逐一执行,无论是HQL还是SQL。因此,如果插入查询首先按顺序排列,那么您将获得插入的记录。