论坛首页 入门技术论坛

hibernate引出的几个纠结事件分析

浏览 8687 次
该帖已经被评为新手帖
作者 正文
   发表时间:2011-04-27  
nakupanda 写道
你插入失败后事务有回滚吗?

junit下测试的,有回滚
1 请登录后投票
   发表时间:2011-04-27  
悲剧了 写道
我们项目用的是ibatis,好久没写hibernate,手生,练习中发现几个以前没有多想的问题,跟大家分享下

首先:数据库字段设为自增长的时候,比如现在数据库里面的id是1,那么我继续插入,如果失败,下次我再插入结果就是3

我删除数据库所有数据,再次强势再插入结果是4

这个数据库是怎么回事,为什么插入失败,下次再插入,他会是3,删除所有数据,再次插入会是4呢?

以前一直用,还真没想过




首先的这个问题 我感觉这个是正常的 因为你在插入数据之前 hibernate先去取得下一个主键值 这样自增序列的值肯定会增加一个值  没有什么大惊的 所以当你插入失败的时候序列值通用会自增
。。。。。。。。
0 请登录后投票
   发表时间:2011-04-27  
pk3589 写道
悲剧了 写道
我们项目用的是ibatis,好久没写hibernate,手生,练习中发现几个以前没有多想的问题,跟大家分享下

首先:数据库字段设为自增长的时候,比如现在数据库里面的id是1,那么我继续插入,如果失败,下次我再插入结果就是3

我删除数据库所有数据,再次强势再插入结果是4

这个数据库是怎么回事,为什么插入失败,下次再插入,他会是3,删除所有数据,再次插入会是4呢?

以前一直用,还真没想过




首先的这个问题 我感觉这个是正常的 因为你在插入数据之前 hibernate先去取得下一个主键值 这样自增序列的值肯定会增加一个值  没有什么大惊的 所以当你插入失败的时候序列值通用会自增
。。。。。。。。

插入前去取值,属于查询出这个值,有影响吗?如果有影响,那么我查询这个主键值,查询后插入就会出现问题。这种查询在使用中很多,
那么这个自增长岂不是不能查询了,查询了后面的插入就会有问题

不知道我的理解对不对?
0 请登录后投票
   发表时间:2011-04-27  
自定义主建生成策略.

比如 select max(id) +1 from dul;
0 请登录后投票
   发表时间:2011-04-27   最后修改:2011-04-27
刚查了一下资料, 很多人说mysql的自增字段不会随事务回滚的..

"
auto_increment,作为MySQL内部自增机制实现,其按一定规则自动实现自增,并且不可回朔,即使回滚,如delete般,ID已经自增过,只会继续增长,不可能跟着回滚和删除操作而减小,否则就不叫自增了。
不仅MySQL,Oracle数据库亦然。
"
http://bbs.phpchina.com/viewthread.php?tid=188731&rpid=1573813&ordertype=0&page=1#pid1573813
0 请登录后投票
   发表时间:2011-04-27   最后修改:2011-04-27
nakupanda 写道
刚查了一下资料, 很多人说mysql的自增字段不会随事务回滚的..

"
auto_increment,作为MySQL内部自增机制实现,其按一定规则自动实现自增,并且不可回朔,即使回滚,如delete般,ID已经自增过,只会继续增长,不可能跟着回滚和删除操作而减小,否则就不叫自增了。
不仅MySQL,Oracle数据库亦然。
"
http://bbs.phpchina.com/viewthread.php?tid=188731&rpid=1573813&ordertype=0&page=1#pid1573813


原来如此。谢了
0 请登录后投票
   发表时间:2011-04-27  
抛出异常的爱 写道
自定义主建生成策略.

比如 select max(id) +1 from dul;


这个触发是每次插入数据,不管失败与否,看来基本明白了是怎么回事

哥们能把第二个问题给解释下吗
0 请登录后投票
   发表时间:2011-04-27  
全删怎么执行sql的, delete from tablename::??
0 请登录后投票
   发表时间:2011-04-28  
无盐以对

id的问题和 hibernate 没有关系。

new Brand, remove  是基本的 Object的状态的问题。

不想贬低。。。不过这是基本概念, 看书应该细致一点。
0 请登录后投票
   发表时间:2011-04-28  
这个数据库暂时估计是oracle
hibernate配置文件中主键用的估计是oracle中的sequence

当操作主键一次,主键ID会自增一次,不论是操作增加还是查询,报错报错。所以会出现没增添一次就会增加,如果查询需要不增加主键需要查询临时表dual
0 请登录后投票
论坛首页 入门技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics