2

以下陈述是否有效?

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

当我使用持久性尝试以下代码时;然后在没有任何事务的情况下插入该行(已注释掉)。

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() 正在保存 AFAIK 数据,删除后尝试,大多数情况下会出现错误。

休眠持久化

差异。保存并坚持

于 2013-01-03T12:44:47.450 回答