有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

使用HQL查询的java Hibernate批更新

我的ORM层使用Hibernate。 我试图在一个事务中运行一批HQL查询(我无法使用session.update)。 问题是,即使是交易。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;
}

谢谢你的帮助


共 (1) 个答案

  1. # 1 楼答案

    您正在使用数据库事务注册所有语句,但我认为您希望使用batch updates

    只需添加以下配置属性:

    <property name="hibernate.jdbc.batch_size" value="10"/>
    

    即便如此,我认为您应该使用Hibernate来管理insert/update/delete语句,因为您应该只关注entity state transitionsdirty checking mechanism可以自动检测已修改的实体,Hibernate可以为您生成更新语句,这非常方便