Hibernate persist()方法

时间:2013-01-03 12:28:31

标签: java hibernate

以下陈述是否有效?

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();

2 个答案:

答案 0 :(得分:1)

  

persist()还保证如果在事务边界之外调用它,它将不会执行INSERT语句

这句话是对的。当控件从persist()返回到您的代码时,没有执行INSERT语句。这些声明保证推迟到会话刷新。请注意,如果没有插入曾经persist()将是一个毫无意义的方法。

答案 1 :(得分:0)

由于session.flush(),AFAIK数据正在保存,请在删除后尝试,大多数情况下会出错。

Hibernate persist

Diff. save & persist