Hibernate query.executeUpdate()执行许多查询

时间:2017-01-23 15:53:34

标签: java spring hibernate hql

我使用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。

0 个答案:

没有答案