0

削除されるエンティティがいくつかあります。これらのエンティティには、多対多のリンクがいくつかあります。多対多のリンクを更新するときは、そのエンティティの結合テーブルにある元のリンクを削除して、リンクを新しいリンクに置き換えるだけだと思います。しかし、私はそれがどのように機能するかについて本当に混乱しています。多対多の関係をどのように更新しますか?同じことが削除にも当てはまります。削除のカスケードが設定されている場合は、基本的に、そのエンティティとそれにリンクされているエンティティ(コレクション、複数のエンティティ)を削除します。それはどのように機能しますか?

@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に設定します(事実上、そのエンティティからプロバイダーのリストを削除します)次に、プロバイダーのリストを新しいプロバイダーのリストに設定します...もちろん、そのリストをプログラムで設定する必要があります。それは実行可能に聞こえますか、それとも単にばかげているように聞こえますか?

4

1 に答える 1

1

それがその方法です:

  • リストからプロバイダーを削除すると、QuickLaunchとプロバイダー間の関連付けが削除されます(したがって、対応する行が結合テーブルから削除されます)。
  • リストにプロバイダーを追加すると、QuickLaunchとプロバイダーの間に関連付けが作成されます(したがって、結合テーブルに行が挿入されます)。
于 2012-05-17T16:42:58.343 に答える