我使用HQL创建查询以一次更新多个对象,因此hibernate不需要单独同步每个对象。这是我的疑问:
String queryString = "UPDATE transaction SET value = :newValue, date = :date, user = :user WHERE id in (:idList)";
final Query query = session.createQuery(queryString);
query.setParameter("date", entityList.get(0).getRegDate());
query.setParameter("user", entityList.get(0).getRegUser());
query.setParameter("newValue", newValue);
query.executeUpdate();
所以我会做一个查询来更新实体列表。但是当我执行此操作时,控制台会输出此
Hibernate:
update
TRANSACTION_RECEIPT
set
DATE=?,
USER=?,
ACQ_ID=?,
ESTIMATED_DATE=?,
STATUS=?,
VALUE=?
where
ID=?
Hibernate:
update
TRANSACTION_RECEIPT
set
DATE=?,
USER=?,
ACQ_ID=?,
ESTIMATED_DATE=?,
STATUS=?,
VALUE=?
where
ID=?
Hibernate:
update
TRANSACTION_RECEIPT
set
DATE=?,
USER=?,
ACQ_ID=?,
ESTIMATED_DATE=?,
STATUS=?,
VALUE=?
where
ID=?
Hibernate:
update
TRANSACTION_RECEIPT
set
STATUS=?,
regdate=?,
reguser=?
where
ID in (
? , ? , ?
)
它会更新我不想要保留的其他值。我尝试使用session#evict在executeUpdate()之前将实体从上下文中分离出来:
for (BaseEntity entity : entityList) {
session.evict(entity);
}
但它并没有改变任何事情。 如何防止其他更新行? 我使用的是来自Hibernate的sessionFactory,我没有在项目中使用entityManager。