由于此for循环较为复杂,一直出现save后只有一条数据,打断点发现明明多次进行了save,折腾半天,最后发现是实体类创建时是在循环外部。

导致每次save实际上都是对同一个对象操作,不过也说明了一点,hibernate save实体类有id时,也会根据主键生成策略去再次生成id

以前没踩过这种坑,特此记录下。

Entity e=new Entity()
for(xxx){
    ......
    e.setXXX();
    e.save();
    ......
}

解决方式:

1.将创建实体类放到循环内。


for(xxx){
    ......
    Entity e=new Entity()
    e.setXXX();
    e.save();
    ......
}

2.每次save后都对Session进行一次clear。

Entity e=new Entity()
for(xxx){
    ......
    e.setXXX();
    e.save();
    session.flush;
    session.clear;
    ......
}
Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐