2

以下のステートメントは有効ですか?

persist() also guarantees that it will not execute an INSERT statement if it is called outside of transaction boundaries

persist を使用して以下のコードを試すと、次に、トランザクションなしで行が挿入されます(コメントアウトされています)。

SessionFactory sessionFactory = new Configuration().configure("student.cfg.xml").buildSessionFactory();
    Session session = sessionFactory.openSession();

    //Transaction tran = session.beginTransaction();

    /*
     * Persist is working without transaction boundaries ===> why?
     */

    Student student = new Student();
    student.setFirstName("xxx");
    student.setLastName("yyy");
    student.setCity("zzz");
    student.setState("ppp");
    student.setCountry("@@@");
    student.setId("123456");
            session.persist(student);
            //tran.commit();
            session.flush();
    session.close();
4

2 に答える 2

1

persist() は、トランザクション境界の外で呼び出された場合、INSERT ステートメントを実行しないことも保証します。

このステートメントは正しいです。制御がpersist()コードに戻ったとき、INSERTステートメントは実行されていません。これらのステートメントは、セッションがフラッシュされるまで延期されることが保証されています。挿入がまったく行われなかった場合、これpersist()は無意味な方法になることに注意してください。

于 2013-01-03T12:53:53.250 に答える
0

私の知る限り、session.flush() のためにデータが保存されています。これを削除してから試してください。ほとんどの場合、エラーが発生します。

ハイバネート持続

違います。保存して永続化

于 2013-01-03T12:44:47.450 に答える