2 trl20121212 trl20121212 于 2016.01.23 00:26 提问

Hibernate 语句执行顺序问题
代码:
private static void editInfo() {
    Session session = null;
    try {
        session = HibernateUtil.getSession();
        if (session != null) {
            session.beginTransaction();
            Person p = new Person("王三", 22, "男", "北京");
            session.save(p);
            session.delete(p);
            p.setId(null);
            session.save(p);
            session.getTransaction().commit();
        }
    } catch (Exception ex) {
        if (session != null) {
            session.getTransaction().rollback();
        }
        ex.printStackTrace();
    } finally {
        HibernateUtil.CloseSession();
    }
}
控制台显示:
Hibernate: 
insert 
into
    PERSON
    (NAME, AGE, GENDER, ADDRESS) 
values
    (?, ?, ?, ?)

Hibernate:
delete
from
PERSON
where
ID=?
Hibernate:
insert
into
PERSON
(NAME, AGE, GENDER, ADDRESS)
values
(?, ?, ?, ?)

按照Hibernate的规定执行应该是insert,insert,delete,但不知道为什么这里是insert,delete,insert,请各位大哥指教一下。

3个回答

u010876380
u010876380   2016.01.23 01:36
已采纳

数据库执行sql时,遵循事务原则。按照你的程序执行顺序就应该是save(insert)、delete、save(insert)呀。还有你的ID难道不是唯一的吗?为什么能设置为空很难理解。

caozhy
caozhy   Ds   Rxr 2016.01.23 00:50

session.getTransaction().commit();才会真正执行挂起的数据库操作,之前的操作会产生一个变更集,但是不会记录它们被调用的顺序,所以最后的顺序是不可知的。

a8761087
a8761087   Rxr 2016.01.23 19:24

和hibernate无关啊,就按代码顺序执行。

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!