Mysql Hibernate批处理是否可以生成标识?

Mysql Hibernate批处理是否可以生成标识?,mysql,hibernate,Mysql,Hibernate,我刚刚读了这篇文章,它说如何使用hibernate进行批处理,但最后它说它是通过SEQUENCEgeneration完成的。我想知道是否可以通过IDENTITY生成。从周围的阅读中,它听起来像是IDENTITY的生成是在执行INSERT时完成的,这意味着可能太晚了 如果我 mgr.persist(child) mgr.persist(parent) 在循环中,但我需要批处理,因为插入延迟到刷新时间,所以子项在mgr.flush()之前不会有id。查看标识生成: 唯一的缺点是,在执行INSERT

我刚刚读了这篇文章,它说如何使用hibernate进行批处理,但最后它说它是通过
SEQUENCE
generation完成的。我想知道是否可以通过
IDENTITY
生成。从周围的阅读中,它听起来像是
IDENTITY
的生成是在执行
INSERT
时完成的,这意味着可能太晚了

如果我

mgr.persist(child)
mgr.persist(parent)
在循环中,但我需要批处理,因为插入延迟到刷新时间,所以子项在
mgr.flush()
之前不会有id。查看
标识
生成:

唯一的缺点是,在执行INSERT语句之前,我们无法知道新分配的值

所以这意味着我必须这样做

mgr.persist(child), mgr.persist(child), mgr.persist(child)
然后
mgr.flush()
用于id填充

然后

我们在mysql中,“可以”切换,因此我们在postgres中,后者对序列生成和池有更好的支持,因此它一次可以捕获50个ID

我的主要问题是,是否有人使用hibernate和
IDENTITY
生成以及子/父关系来批处理数据?如果是这样,什么样的模式有效?我的上述模式有效吗?还是我错了,我能做到

mgr.persist(child), mgr.persit(parent), mgr.persist(child), mgr.persist(parent)
老实说,这更容易保存,因为我可以循环DTO保存数据

如果改用UUID生成,我想MysqL会更好吗?那么我就不必担心代码顺序了?

Hibernate提到了这个限制:

重要的是要认识到,使用
IDENTITY
列会带来一种运行时行为,即必须在已知标识符值之前实际插入实体行

这会打乱扩展持久性上下文(长对话)。由于运行时强制/不一致,Hibernate建议使用其他形式的标识符值生成(例如,
序列

选择
IDENTITY
generation还有另一个重要的运行时影响:Hibernate将无法为使用
IDENTITY
生成的实体批处理
INSERT
语句

这一点的重要性取决于特定于应用程序的用例。如果应用程序通常不使用
IDENTITY
生成器创建给定实体类型的许多新实例,那么这个限制就不那么重要了,因为批处理无论如何都不会有很大帮助


很高兴知道@StemK和UUID世代(我想我在帖子中写了GUID…哎哟)。@DeanHiller据我所知没有这样的限制。但我必须说,使用UUID会导致您使用特定于hibernate的工具,因为JPA规范没有这样做。
mgr.persist(child), mgr.persit(parent), mgr.persist(child), mgr.persist(parent)