save()方法为什么会执行两个hibernate语句呢?

gonglil 2010-01-28 01:27:50
我执行了一个save方法之后为什么会输出两句hibernate语句呢?
Hibernate: select max(ACCOUNT_ID) from account
Hibernate: insert into financing.account (ACCOUNT_MONEY, ACCOUNT_TYPE, ACCOUNT_NOTE, ACCOUNT_DATE, ACCOUNT_NAME, USER_ID, ACCOUNT_ID) values (?, ?, ?, ?, ?, ?, ?)
为什么会有第一句呢?
...全文
170 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
liujun_1028 2010-01-28
  • 打赏
  • 举报
回复
这是很正常的
道光2008 2010-01-28
  • 打赏
  • 举报
回复
什么数据库?
xjmcky 2010-01-28
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 wnjok 的回复:]
hbm.xml的主键生成方式是increment造成的,
让hibernate自动管理主键,比较省事
但是这种方式不能用在分布式数据库上
[/Quote]

楼上正解,你的主键是自动生成的,所以会出现两条SQL语句。第一条用于查询出最大的ID主键。建议采用序列或是自己(不是自动,设置主键生成方式)加1的方式!
timeriver_wang 2010-01-28
  • 打赏
  • 举报
回复
hbm.xml的主键生成方式是increment造成的,
让hibernate自动管理主键,比较省事
但是这种方式不能用在分布式数据库上
  • 打赏
  • 举报
回复
你的hbm.xml的主键生成方式是不是increment?是的话就会那样,它会先查你数据库主键的最大值
bunrise 2010-01-28
  • 打赏
  • 举报
回复
这个应该是你的主键生成策略的问题吧
他先查询出你当前最大ID
插入数据的时候保证ID不重复
xuexijava 2010-01-28
  • 打赏
  • 举报
回复
表之间有关联吧
帖你的配置文件出来看看
另外你调用的是saveOrUpdate()还是save()方法?
hoojo 2010-01-28
  • 打赏
  • 举报
回复
那要看你主体怎么用了,
比如:你保存了一个对象,但是在commit之前你又获得这个对象的size 或是取一个值。
那就会多出现一条语句。具体原因还是还是hibernate的持久化操作了。

81,092

社区成员

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

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