0

@ManyToManyの関係を持つ2つのクラスがあります

ファーストクラス:クリップセカンドクラス:場所

主なアイデアは、クリップがいくつかの場所で利用できるということです

これはクリップクラスです。

@Entity
@Table(name = "CLIP")
public class Clip {

    private Long id;
    private List<Location> locations;

    @Id @GeneratedValue(strategy=GenerationType.AUTO)
    public Long getId() {
        return id;
    }
    public void setId(Long id) {
        this.id = id;
    }

    @ManyToMany( )
           @JoinTable(name="CLIP_LOCATION",joinColumns=@JoinColumn(name="CLIP_ID",nullable=false),inverseJoinColumns=@JoinColumn(name="LOCATION_ID",nullable=false) )
    @ForeignKey(name="FK_CLIP_LOCATION",inverseName="FK_LOCATION_CLIP")
    public List<Location> getLocations() {
        return locations;
    }
    public void setLocations(List<Location> locations) {
        this.locations = locations;
}
}

これはLocationクラスです

@Entity
@Table(name = "LOCATION")
public class Location {
}

これは双方向の関係ではありません

私の質問:ユーザーインターフェイスから場所を削除するときに、結合テーブルの関連する行を自動的に削除したいのですが、

それをしてもいいですか?

どの注釈を使用する必要がありますか?

LocationクラスとClipクラスは他の関係でも使用されることに注意してください

ありがとうMaayan私は間違った関係を使用していますか?

4

1 に答える 1

1

これは不可能です。場所を削除する前に、場所のリストから場所を削除する必要があります。アソシエーションは単方向であるため、クエリを実行してその場所で使用可能なすべてのクリップを検索し、各クリップからその場所を削除する必要があります。

もう1つのオプションは、ネイティブSQLクエリを実行して結合テーブルから行を削除することですが、セッションにすでにロードされているエンティティは変更を認識しないことに注意してください。

于 2011-08-11T08:46:07.350 に答える