2016-12-02 5 views
0

私はPerson表とGroup表の間に多対多の関係を持ち、結合表はPersonGroupです。 Personを保存/削除すると、Person, PersonGroup and Groupの表が保存され、削除されます。多対多 - 結合表と1つの表の保存/更新

"Person"と "PersonGroup"テーブルから削除/保存したいだけです。 "Person"のクエリでPersonエンティティに "Group"リストを取得する必要があります。

したがって、基本的に「グループ」は参照テーブルです。これは、グループテーブルの読み取り/更新なしでのみ読み取る必要があります。

どうすればこの問題を解決できますか?

@Entity 
@Table(name="Person") 
public class Person implements Serializable { 
    @Id  
    private long personId; 

    @ManyToMany(cascade=CascadeType.ALL) 
    @JoinTable(name="PersonGroup", [email protected](name="person_id"), 
    [email protected](name="group_id")) 
    private List<Group> groups; 

    } 


@Entity 
@Table(name="Group") 
public class Group implements Serializable { 
    @Id 
    private long groupId; 

    @ManyToMany(mappedBy="groups") 
    private List<Person> persons; 

} 

答えて

0

カスケードは、あなたが、更新を挿入したり、オブジェクトを削除すると、関連するオブジェクトは、挿入、更新または同様に削除されることを意味します。

あなたが/削除/保存Personがちょうど@ManyToMany注釈からcascade=CascadeType.ALLプロパティを削除更新するときGroupテーブル手つかずのままにしたい場合は

次のことを試してください: `cascadetyp.allをRemoveing

@Entity 
@Table(name="Person") 
public class Person implements Serializable { 
    @Id  
    private long personId; 

    @ManyToMany(targetEntity = Group.class, mappedBy="persons") 
    private List<Group> groups; 

} 


@Entity 
@Table(name="Group") 
public class Group implements Serializable { 
    @Id 
    private long groupId; 

    @ManyToMany(targetEntity = Person.class) 
    @JoinTable(name="PersonGroup", 
     [email protected](name="person_id"), 
     [email protected](name="group_id")) 
    private List<Person> persons; 

} 
+0

は、グループテーブルに保存されませんが、それはまた、加入テーブルに保存されませんPersonGroup' – Nero

+0

mappedByのjavadocは少し誤解を招くです... 関係を「所有していない」側の結合テーブルをマップし、関係を「所有する」側のmappedByを使用する必要があります。 今のところ、私は休止状態だと思いますグループオブジェクトを保存した場合、ジョイント可能なものを更新してください... addreへの私の回答を編集しますそのこと –

関連する問題