【问题标题】:Deleting and updating Many-to-Many Relationships using OpenJPA使用 OpenJPA 删除和更新多对多关系
【发布时间】:2012-05-25 05:45:41
【问题描述】:

我有几个实体将被删除。这些实体将有几个多对多链接。更新多对多链接时,我想我将删除该实体的联接表中的原始链接,然后将链接替换为新链接。但我真的很困惑这将如何运作。如何更新多对多关系?删除也是如此。如果您设置了删除的级联,那么您实际上将删除该实体和与其链接的实体(集合,我相信的多个实体)。这将如何运作?

@Entity
@Table(name="QUICK_LAUNCH")
public class QuickLaunch implements Serializable {
...
@ManyToMany(fetch=FetchType.EAGER)
        @JoinTable(name="QUICK_LAUNCH_PROVIDER", 
        joinColumns=@JoinColumn(name="QUICK_LAUNCH_ID"),
        inverseJoinColumns=@JoinColumn(name="RESOURCE_ID"))
private List<Provider> providerList;
}

当时的想法是我会删除任何指向提供商的链接,然后只添加新链接。我可以以编程方式执行此操作,只需删除链接表中的链接,但我觉得这应该由 ORM 处理(这是一种不合理的感觉吗?)。
有没有人对删除多对多关系有任何一般的智慧之言, 也许我可以使用实际实体删除和更新关系...

就像说我有一个带有提供者列表的 quickLaunch...我将该提供者列表设置为空(实际上从我希望的那个实体中删除该提供者列表)然后我将该提供者列表设置为一个新的提供者列表...我当然必须以编程方式设置该列表。这听起来可行还是太愚蠢了?

【问题讨论】:

    标签: jpa-2.0 openjpa


    【解决方案1】:

    就是这样:

    • 从列表中删除提供程序将删除 QuickLaunch 和提供程序之间的关联(从而从连接表中删除相应的行);
    • 将提供程序添加到列表中将创建 QuickLaunch 和提供程序之间的关联(从而在连接表中插入一行)。

    【讨论】:

    • 添加或删除时是否需要调用持久化或合并?还是只需将这些值添加到列表中即可持久化数据?
    • 添加到列表中足以创建实体之间的链接。当然,这两个实体必须已经是持久的和附加的。
    猜你喜欢
    • 2012-03-23
    • 1970-01-01
    • 1970-01-01
    • 2013-09-26
    • 1970-01-01
    • 1970-01-01
    • 2014-09-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多