使用OpenJPA删除和更新多对多关系

时间:2012-05-17 16:03:47

标签: jpa-2.0 openjpa

我有几个实体将被删除。这些实体将有一对多对多链接。在更新多对多链接时,我想我只会删除该实体的连接表中的原始链接,只需用新链接替换该链接即可。但我真的很困惑这是如何工作的。你如何更新多对多关系?同样的事情是删除。如果你有删除集的级联,那么你基本上会删除该实体和链接到它的实体(集合,我相信的多个实体)。这会怎么样?

@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 ...我将提供者列表设置为null(有效地从我希望的那个实体中删除提供者列表)然后我将提供者列表设置为新的提供者列表......我当然必须以编程方式设置该列表。这听起来是可行的还是只是愚蠢的?

1 个答案:

答案 0 :(得分:1)

这是要做的事情:

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