java - Hibernate更新有时不起作用

标签 java hibernate

我有一个要求,即根据 uuid 更新行,其中一个 uuid 可能与多行关联。

场景如下: 4a90558c-4a5b-4af7-8c68-60ff81f74ef3 是我的 uuid,它存在于我的数据库中的 8 列中。

我的java代码如下:

    try{
        session = sessionFactory.getCurrentSession();
        tx = session.getTransaction();
        criteria = session.createCriteria(Archive.class);
        criteria.add(Restrictions.eq("bagUuid",  "4a90558c-4a5b-4af7-8c68-60ff81f74ef3"));
        ScrollableResults items = criteria.scroll();

         while ( items.next() ) {
             Archive archive = (Archive)items.get(0);
             archive.setDecision(1);
             archive.setOperatorAssigned("test");
             session.saveOrUpdate(archive);
             session.flush();
             session.clear();
         }
         tx.commit();
        LOGGER.info("Archive Record is updated: "+archive.getFilePath());
    }catch(Exception e){
        recordUpdated = false;
        tx.rollback();
        LOGGER.error("Archive Record failed to update due to exception in updateArchiveRecord method: "+e.getMessage());
    }

有时与 UUID 关联的所有记录都会更新,但有时会失败。 我认为这可能是 Hibernate API 的问题。 其他人是否遇到过同样的问题。

最佳答案

这一行看起来很可疑:

Archive archive = (Archive)items.get(0);

这意味着无论 ScrollableResults 中的项目数量有多少,您都将仅更新第一个 Archive 对象。如果我正确地理解你想要做什么,它应该是当前记录:

Archive archive = (Archive)items.get();

另外,我会移出/删除 session.flush() 和 session.clear()。最终代码如下所示:

try{
    session = sessionFactory.getCurrentSession();
    tx = session.getTransaction();
    criteria = session.createCriteria(Archive.class);
    criteria.add(Restrictions.eq("bagUuid",  "4a90558c-4a5b-4af7-8c68-60ff81f74ef3"));
    ScrollableResults items = criteria.scroll();

     while ( items.next() ) {
         Archive archive = (Archive)items.get();
         archive.setDecision(1);
         archive.setOperatorAssigned("test");
         session.saveOrUpdate(archive);
     }
     tx.commit();
     session.close();
    LOGGER.info("Archive Record is updated: "+archive.getFilePath());
}catch(Exception e){
    recordUpdated = false;
    tx.rollback();
    LOGGER.error("Archive Record failed to update due to exception in updateArchiveRecord method: "+e.getMessage());
}

斯拉瓦·伊梅舍夫

关于java - Hibernate更新有时不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31088735/

相关文章:

java - 使用不是 Id 的 hibernate 和 Mysql 的自动增量,所以我可以用触发器重置它

java - JPA 查询中子对象的排序返回

java - Vaadin网格与表格

java - 如何获取对包内文件的引用

java - 为什么我的链表不添加节点? ( java )

java - 这个图案的名字是什么? (答案: Remote Proxy)

java - LWJGL Display.set宽度/高度?

java - Locale对象可以用hibernate存储在数据库中吗

java - Spring Boot 和 Hibernate 多次调用同一个方法

hibernate - 无法为事务打开 hibernate session /无法打开连接