使用HQL查询进行Hibernate批量更新

Las*_*sti 6 java mysql hibernate jdbc batch-processing

我正在使用Hibernate作为我的ORM层.我试图在一个事务中运行一批HQL查询(我不能使用session.update).问题是即使transaction.commit()在循环结束时,更新查询也会逐个运行.有没有办法在一个事务中运行多个HQL查询?

public void updateItems() {
    t = session.beginTransaction();
    for (int i = 0; i < itemList.size(); i++) {
        Query q = createUpdateQuery(session, itemList.get(i));      
        q.executeUpdate(); //updating one by one, and not waiting for transaction commit
    }
    t.commit();
}



Query createUpdateQuery(Session session, Item item) {
    Query q = session.createQuery(
                "Update Item i set i.notes=:notes, i.time=:time, i.counter=:counter, i.status=:status Where i.id=:id and i.time=:time");

    q.setParameter("time", item.getTime());
    q.setParameter("status", item.getStatus());
    q.setParameter("notes", item.getNotes());
    q.setParameter("id", item.getId());
    return q;
}
Run Code Online (Sandbox Code Playgroud)

感谢任何帮助.

Vla*_*cea 2

您正在使用数据库事务来注册所有语句,但我认为您想使用批量更新

只需添加以下配置属性:

<property name="hibernate.jdbc.batch_size" value="10"/>
Run Code Online (Sandbox Code Playgroud)

即便如此,我认为你应该使用 Hibernate 来管理插入/更新/删除语句,因为你应该只关注实体状态转换脏检查机制可以自动检测已修改的实体,Hibernate 可以为你生成更新语句,这就方便多了。