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

时间:2013-01-02 13:21:42

标签: java hibernate transient

我需要更新from的两个字段“to”和“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

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状态持久?

1 个答案:

答案 0 :(得分:0)

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

它应该有用。