Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用hibernate会话方法更新映射实体类的实例?_Java_Hibernate_Transient - Fatal编程技术网

Java 如何使用hibernate会话方法更新映射实体类的实例?

Java 如何使用hibernate会话方法更新映射实体类的实例?,java,hibernate,transient,Java,Hibernate,Transient,我需要将bp的两个字段“从”和“到”更新p也与bp一起被提取。自动刷新已禁用,因此我必须显式执行刷新 Query q = session .createQuery(" select distinct bp from BP bp " + " join fetch bp.p " + " where bp.id = 2"); bp = (BP

我需要将
bp
的两个字段“
”和“
”更新<代码>p也与
bp
一起被提取。自动刷新已禁用,因此我必须显式执行刷新

        Query q = session
                .createQuery(" select distinct bp from BP bp "
                        + " join fetch bp.p "
                        + " where bp.id = 2");

        bp = (BP) q.list().get(0);
        session.getTransaction().commit();

        session = test.services.HibernateUtil
                .getSessionFactory().getCurrentSession();
        session.beginTransaction();
        bp.setFrom(new Date());
        bp.setTo(new Date());
        session.update(bp);
        session.flush();
        session.getTransaction().commit();
当我运行上述代码时,它显示以下异常:

org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing: model.P
java.lang.NullPointerException
    at org.hibernate.type.LongType.next(LongType.java:79)
    at org.hibernate.engine.Versioning.increment(Versioning.java:131)
在刷新之前,我无法保存
p
,因为
save()
方法试图插入违反
唯一键约束的新记录

当我在刷新之前尝试更新
p
时,出现以下异常:

org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing: model.P
java.lang.NullPointerException
    at org.hibernate.type.LongType.next(LongType.java:79)
    at org.hibernate.engine.Versioning.increment(Versioning.java:131)

有没有办法使
p
的状态保持不变?

在刷新会话之前,请尝试事务提交


它应该可以工作。

该对象的
version
列是否为空?p的yes version字段为空。但bp的值不是空的。ThanksHibernate认为p是暂时的(即数据库中不存在),因为它的版本fild为null。在数据库中将其设置为0,然后重新运行代码。我犯了一个错误(正如@Augusto所指出的),p的version字段为null,因此p没有得到更新。