JPA:@ManyToMany和@ManyToOne

时间:2017-10-17 16:24:35

标签: java jpa querydsl

在JPA中,实体的字段是否可以同时注释@ManyToMany和@ManyToOne?

这是我的表格:

Table1
   - String id (pk)
   - ...

Table2
   - ...
   - String object_id (fk Table1.id)

Table3
   - ...
   - String object_id (fk Table1.id)

这是我的实体(简称ofc):

Entity1 {
    private Entity1PrimaryKey pk;
}

Entity2 {
    private Entity1 entity1;
}

Entity3 {
    private Entity1 entity1;
}

我会尽力解释:

  • @ManyToOne:Entity2和Entity3都有一个引用Entity1的字段。因此,存在多对一的关系。

  • @ManyToMany:在JPA查询中,我需要加入Entity2和Entity3。这是SQL中的查询:

    SELECT fieldFromTable2,fieldFromTable3 从表2 INNER JOIN Table3 ON Table2.object_id = Table3.object_id;

    因此,我认为我必须使用@ManyToMany。但是我遇到了一些错误。

所以我想知道:是否可以将@ManyToMany和@ManyToOne放在实体的同一个字段上?

2 个答案:

答案 0 :(得分:0)

这不行吗?

SELECT t2.fieldFromTable2, t3.fieldFromTable3
FROM Table2 t2, Table3 t3
WHERE t2.entity1 = t3.entity1;

答案 1 :(得分:0)

简短回答:不,我不相信单个字段可以应用多个关系注释。这似乎暗示了,因为从概念上讲,两个Entites之间存在关系。

为了深入研究你的问题,我认为你误解了基于集合的关系的使用(@OneToMany,@ ManyToMany)。当实体与另一个实体的多个实例相关时,即table1中的行可以连接到table2中的多个行时,会发生这些情况。如果table1也与table3有关,那就是一个完全独立的关系。

OneToMany示例是学生可以发送许多电子邮件,但每个特定电子邮件只能由单个学生发送。

ManyToMany的例子是每个大学课程都有很多学生,每个学生都需要多门课程。

如果我们还想知道学生所有课程需要哪些书籍,那么这些书籍将与其他关系分开。