代码:
Configuration config = new Configuration().configure();
Session sess = config.buildSessionFactory().openSession();
Transaction trans = sess.beginTransaction();
userType type = new userType();
type.setId(1);
userInfo info = new userInfo("asdfeee","bb","ddd","eee","fff",true,type);
System.out.println("调用save方法");
sess.save(info);
System.out.println("提交事务");
trans.commit();
sess.close();在映射主键时,选择的增长方式是increment:
<id name="id" column="id" type="int">
<generator class="increment"></generator>
</id>输出是:调用save方法
Hibernate:
select
max(id)
from
userInfo
提交事务
Hibernate:
/* insert entity.userInfo
*/ insert
into
userInfo
(username, password, address, phone, sex, email, userType, id)
values
(?, ?, ?, ?, ?, ?, ?, ?)这时,“提交事务”这四个字在insert语句的前面。现在,将increment改成native,
<id name="id" column="id" type="int">
<generator class="native"></generator>
</id>
然后在表里将id列设为自动标识。
再次执行上面的代码,输出是:调用save方法
Hibernate:
/* insert entity.userInfo
*/ insert
into
userInfo
(username, password, address, phone, sex, email, userType)
values
(?, ?, ?, ?, ?, ?, ?)
提交事务这时,“提交事务”这四个字跑到了insert的后面去了。
为什么呢?只不过是换了一个主键的生成方式而已!
save方法生成的SQL到底是什么时候被执行的?
谢谢回答!
Configuration config = new Configuration().configure();
Session sess = config.buildSessionFactory().openSession();
Transaction trans = sess.beginTransaction();
userType type = new userType();
type.setId(1);
userInfo info = new userInfo("asdfeee","bb","ddd","eee","fff",true,type);
System.out.println("调用save方法");
sess.save(info);
System.out.println("提交事务");
trans.commit();
sess.close();在映射主键时,选择的增长方式是increment:
<id name="id" column="id" type="int">
<generator class="increment"></generator>
</id>输出是:调用save方法
Hibernate:
select
max(id)
from
userInfo
提交事务
Hibernate:
/* insert entity.userInfo
*/ insert
into
userInfo
(username, password, address, phone, sex, email, userType, id)
values
(?, ?, ?, ?, ?, ?, ?, ?)这时,“提交事务”这四个字在insert语句的前面。现在,将increment改成native,
<id name="id" column="id" type="int">
<generator class="native"></generator>
</id>
然后在表里将id列设为自动标识。
再次执行上面的代码,输出是:调用save方法
Hibernate:
/* insert entity.userInfo
*/ insert
into
userInfo
(username, password, address, phone, sex, email, userType)
values
(?, ?, ?, ?, ?, ?, ?)
提交事务这时,“提交事务”这四个字跑到了insert的后面去了。
为什么呢?只不过是换了一个主键的生成方式而已!
save方法生成的SQL到底是什么时候被执行的?
谢谢回答!
也就是到
sess.save(info);
这一步,就与数据库发生了实质性的交互
所以你后看到的是 Hibernate:
/* insert entity.userInfo
*/ insert
into
userInfo
(username, password, address, phone, sex, email, userType)
values
(?, ?, ?, ?, ?, ?, ?)
提交事务当你用
<id name="id" column="id" type="int">
<generator class="increment"></generator>
</id>
时侯,他先与数据库交互找大最大的 id
后来执行
sess.save(info);
这一句,,注意他并没提交事务,只是写到缓存中去了
只有到
trans.commit();
才提交事务
所以你在显示
提交事务
之后才出现sql语句,,
Hibernate:
/* insert entity.userInfo
*/ insert
into
userInfo
(username, password, address, phone, sex, email, userType, id)
values
(?, ?, ?, ?, ?, ?, ?, ?)