【发布时间】:2012-12-16 20:48:37
【问题描述】:
我需要更新bp 的两个字段“from”和“to”。 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
我无法在刷新之前保存p,因为save() 方法试图插入违反unique key constraint 的新记录。
当我尝试在刷新之前更新 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 的版本字段为空。但 bp 不为空。谢谢
-
Hibernate 认为 p 是 transint(即数据库中不存在),因为它的版本字段为空。在数据库中设置为0,然后重新运行代码。