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没有得到更新。