如何解决Hibernate可以批量生成IDENTITY吗?
我刚刚读了这篇文章,其中介绍了如何使用休眠进行批处理,但最后它说它是通过SEQUENCE
生成完成的。我想知道IDENTITY
代是否可行。通过阅读,听起来IDENTITY
的生成是在执行INSERT
时完成的,这意味着为时已晚了吗?
即。如果我
mgr.persist(child)
mgr.persist(parent)
在一个循环中,但是我要批处理,直到插入mgr.flush()
为止,子代才具有ID,因为插入操作会延迟到刷新时间。查看IDENTITY
代:
唯一的缺点是我们无法在执行INSERT语句之前知道新分配的值。
所以这意味着我必须这样做
mgr.persist(child),mgr.persist(child),mgr.persist(child)
然后mgr.flush()
用于ID填充
然后
mgr.persist(parent,mgr.persist(parent),mgr.persist(parent)
我们在mysql中并且“可以”切换,因此我们在postgres中,它对序列生成和池化提供了更好的支持,因此一次可以捕获50个ID。
我的主要问题是,是否有人用hibernate和IDENTITY
生成以及子/父级关系来批处理数据以完成批处理?如果是这样,什么模式有效?我的上述模式有用吗?还是我错了,我可以做
mgr.persist(child),mgr.persit(parent),mgr.persist(parent)
说实话,保存起来更简单,因为我可以遍历DTO保存该数据。
如果我改用UUID生成,我认为MysqL会更好吗?那我不必担心代码顺序吗?
解决方法
休眠documentation对此限制进行了说明:
重要的是要意识到,使用
IDENTITY
列会强加一种运行时行为,其中必须在知道标识符值之前物理插入 行。这会弄乱扩展的持久性上下文(长时间的对话)。由于运行时的强制/不一致,Hibernate建议使用其他形式的标识符值生成(例如
SEQUENCE
)。选择
IDENTITY
生成还有另一个重要的运行时影响: Hibernate将无法使用INSERT
生成实体的IDENTITY
语句批处理。这的重要性取决于特定于应用程序的用例。如果应用程序通常不使用
IDENTITY
生成器创建给定实体类型的许多新实例,则此限制将变得不那么重要,因为批处理无论如何都不会很有帮助。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。