我正在“事务化”一些广泛的数据库操作,并且遇到了以下问题:如果我通过hibernate模式运行sql查询,但未使用MQL方法,则数据库视图似乎不正确。具体来说,在大多数情况下,代码以更适当的方式使用hibernate模式,但是在某些地方,有人决定只执行sql。我不喜欢他们这样做,但是在这一点上“这就是事实”。
我发现了一个解释,这似乎解释,但所有的示例都是WRT实际上得到和管理代码交易。我们在整个类上使用@TransactionAttribute批注来更改此代码,并发现了发生此行为的很多地方,但我不完全相信该解释适用于仅包装在批注中的代码- 我当时假设使用hibernate管理器的任何东西都将依赖于会话中的对象缓存。
如果我因错误的术语等而处于hibernate状态,请提前致歉。
您的问题令人困惑,但是我想您是说Hibernate在执行本机查询时不在会话缓存中寻找实体。
SQL查询或本机查询是Hibernate只是中继到数据库的查询。Hibernate不会解析查询,也不会解析结果。但是,Hibernate将允许您处理结果,以将列转换为类的属性。也就是说,本机查询绕过会话缓存听起来很自然。这是因为Hibernate对您的查询一无所知,也不知道该查询的“结果”(当时还不是对象)。