关于hibernate for循环 save 只存储一次的问题 持久态和游离态

本文通过一个具体示例,解析了使用Hibernate框架时常见的保存数据误区。指出若对已持久化的对象进行多次保存操作,Hibernate将执行更新而非插入指令。文章提供了正确的实现方式,即为每次循环创建新的对象实例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

错误例子:         

Pay pay=new Pay();
PayDAO paydao=new PayDAO();

for(int i=0;i<10;i++){

     pay.setId(i);

     pay.setName("第"+i+"个");

 }

运行只有,数据库里只有一条数据。

 

解释:

当对一个new对象obj进行了第一次save之后, 该对象obj就会从游离态变为持久态,当你对obj进行第二次或者以后的save时,多是对持久态的obj进行操作,这时hibernate不会对数据库发出 insert的请求,而是update命令,所以不管你SAVE几次都是看到最后一条。若你想看到SAVE所有数据,你就得从新给HIBERNATE一个游离态对象。比如save(obj1),save(obj2)...

 

正确实例:

 

for(int i=0;i<10;i++){   

     Pay pay=new Pay(); 
     PayDAO paydao=new PayDAO();

     pay.setId(i);

     pay.setName("第"+i+"个");

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值