2017-06-19 8 views
0

@ManyToManyの関係に2つのエンティティがあり、そのIDでリンクしたいと思っています。Hibernate @ManyToManyには2つの不要な列があります

Userは、多くのマネージャーがTaskで、Taskは1人または複数のマネージャーを持つことができます。かなり簡単です。

だから私は、次の属性を持つ私のエンティティを定義し:

@Entity 
@Table(name = "task") 
public class TaskEntity { 
    @Id 
    @Column(unique = true, name="task_id") 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private Long id; 

    @ManyToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL) 
    @JoinTable(name = "user_task") 
    private Set<UserEntity> validators = new HashSet<>(0); 

    // Getters & setters  
} 

そして

@Entity 
@Table(name = "\"user\"") 
public class UserEntity { 
    @Id 
    @Column(unique = true, name = "user_id") 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private Long id; 

    @ManyToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL) 
    @JoinTable(name = "user_task") 
    private Set<TaskEntity> tasksToValidate = new HashSet<>(0); 

    // Getters & setters 
} 

をHibernateが自動的に私のテーブルを生成し、何らかの理由でuser_task4つのの列があります。のIDをUserEntity、マネージャのID、TaskEntityのID、および管理するタスクのIDを含む。しかし、あなたが見ることができるように、これらは同じ値のペアです。

私はちょうどUserEntityのIDとTaskEntityのIDだけを保持したいとHibernateに伝えることができますか?

+0

は、それがユーザーによって管理されているので、 'mappedBy'子側 – solomkinmv

+0

に子側は' TaskEntity'いる使用しようか?そして私は 'user_id'をマップする必要がありますか? – Christopher

+1

それはあなたのビジネスロジックに依存しますが、私にとってあなたは正しいです – solomkinmv

答えて

2

あなたは双方向の多対多リレーションシップを持っています。片側を親側とし、もう片側を子側としてマークする必要があります。これを行うには、親側でmappedByを使用する必要があります。

多対多を使用するための最善の方法については、この記事を参照してください:https://vladmihalcea.com/the-best-way-to-use-the-manytomany-annotation-with-jpa-and-hibernate/

関連する問題