一次持久化多个对象

Posted

技术标签:

【中文标题】一次持久化多个对象【英文标题】:Persist multiple objects at one go 【发布时间】:2011-02-19 19:15:23 【问题描述】:

我当前的项目使用 JPA 和 HSQLDB。

我想一次性持久化多个相关的对象,这在 JPA 中是否可行?

例如:假设有两个实体,例如 PersonContactInfo,其中 Person 有 List<ContactInfo> 实体。

如果我想将Person 实体与ContactInfos 一起保留,我正在做的是在Person 中设置列​​表并调用persist。这样做会照顾坚持List<ContactInfo>吗? (外键引用数据库表中的Person ID)

否则,现在请告诉我如何在 JPA 中实现这一点。

问候,

萨提亚

【问题讨论】:

【参考方案1】:

它会,如果你设置@*ToMany(cascade=CascadeType.PERSIST)

【讨论】:

您好 Bozho,您能否告诉我如何在 JTA 模式下获取事务,因为如果我使用 EntityManager,它会抛出 IllegalStateException。或者您能告诉我如何在 JTA 模式下建立连接吗?应该通过 JNDI 查找吗?【参考方案2】:

您可以按照 Bozho 的建议进行操作,但如果您还希望在 Person 完成后更新、删除它们等,我建议您像这样进行级联:

@OneToMany(cascade = CascadeType.ALL, orphanRemoval = true)

注意:orphanRemoval 仅适用于 JPA 2。

【讨论】:

以上是关于一次持久化多个对象的主要内容,如果未能解决你的问题,请参考以下文章

当我第一次检索必须在 @ManyToMany 关系中使用的对象时,为啥我会获得这个“传递给持久化的分离实体”?

我可以在 Sonata Admin 控制器中使用 prePersist/preUpdate 来持久化多个对象吗?

应该如何对列表中的项目进行重新排序,并更新多个对象,如何使用 GraphQL 突变进行持久化?

将对象从多个存储保存到单个持久存储

同时在Kubernetes中创建多个持久卷?

使用没有 em.flush() 的 JPA 持久化深度对象图