我有一个非常基本的Hibernate问题。 HQL(和/或Criteria)更新查询会导致更新活动域对象吗?它们是否会自动从第一级缓存中刷新现在无效的域对象?
示例:
Player playerReference1 = session.get(Player.class,1);
session.createQuery("update players set gold = 100").executeUpdate();
//Question #1 -- does playerReference1.getGold() now return 100?
Player playerReference2 = session.get(Player.class,1);
//Question #2 -- does playerReference2.getGold() return 100, or is it the same exact object?
如果有可能某些代码稍后需要它,我是否应该逐出驱逐受HQL更新影响的所有对象?
答案 0 :(得分:2)
这两个问题的答案都是否定的。根据 Java Persistence with Hibernate ,第12章:
如果执行直接对数据库中的行进行操作的SQL语句,则所做的任何更改都不会影响内存中的对象(无论它们处于何种状态)。换句话说,任何直接DML语句都会绕过Hibernate持久化上下文(以及所有缓存)。
这也适用于HQL。他们建议在加载会话中的任何对象之前执行DML。