hibernate SQL语句何时执行

joejoe1991 2008-03-09 02:17:48
代码:
			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到底是什么时候被执行的?
谢谢回答!
...全文
121 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
joejoe1991 2008-03-09
  • 打赏
  • 举报
回复
谢谢!分给你了。
sky_ccy 2008-03-09
  • 打赏
  • 举报
回复
有空好好的看看Hibernate 工具文挡,,它那将的很清楚
sky_ccy 2008-03-09
  • 打赏
  • 举报
回复
如果对象使用native方式来生成ID(持久化标识)的话,它们一执行save就会被插入数据库
也就是到
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
(?, ?, ?, ?, ?, ?, ?, ?)

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧