如何在Hibernate中保存多个实体?

5
在我的Java Web应用程序中,我想一次持久化100个实体。有没有比其他方法更快的方法呢?我有时间限制,持久化操作应该很快。谢谢。
2个回答

12

基本上,您要寻找的是使用JPA批量插入数据库。这些主题已经被提出,以下内容可以帮助您:

概括

  • 使用Hibernate的批处理插入。 Hiberate提供了方法,用于批量插入和更新实体。

  • 禁用自动生成ID。如果您自动生成ID,则Hibernate会为每个实体执行查询以生成主键。

意见

基本上,我认为禁用自动ID生成是一个坏主意。您可以使用Hibernate的大多数批处理方法,但这不会节省太多性能。

完成后,建议您在应用程序的其他层中寻找优化。


1
我终于尝试了你的解决方案,并且它有效了。非常感谢你。 - Rami
@Rami,很高兴听到这个消息。你最终使用了哪个解决方案? - d1e
嘿@JMelnik,我现在正在使用批量插入,所以不是保存每个实体,而是利用一对多关系,当我保存父实体时,所有子实体都会随之保存。尽管如此,我仍在使用自动ID生成。 - Rami

1
如果您正在使用与Spring集成的Hibernate,可以使用HibernateTemplate#saveOrUpdateAll
 mHibernateTemplate.saveOrUpdateAll(entities);

这个语法的版本是什么?在使用Hibernate 3.x的代码中,现在升级到Hibernate 5.x后,这个选项不可用了。有什么替代方案吗? - Jess
不正确。请尝试指定版本。似乎saveOrUpdateAll不可用。 - Vishrant

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接