一次持久化多个对象
Posted
技术标签:
【中文标题】一次持久化多个对象【英文标题】:Persist multiple objects at one go 【发布时间】:2011-02-19 19:15:23 【问题描述】:我当前的项目使用 JPA 和 HSQLDB。
我想一次性持久化多个相关的对象,这在 JPA 中是否可行?
例如:假设有两个实体,例如 Person
和 ContactInfo
,其中 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 来持久化多个对象吗?