2

の 2 つのフィールド ' 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永続的な状態にする方法はありますか?

4

1 に答える 1

0

セッションをフラッシュする前に、トランザクションのコミットを試してください。

それはうまくいくはずです。

于 2013-01-02T13:52:23.210 に答える