JPA :带有@ManyToMany 和@ManyToOne 的字段
JPA : field with @ManyToMany and @ManyToOne
在 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
Table2.object_id = Table3.object_id;
上的内连接表 3
因此,我认为我必须使用@ManyToMany。但是我遇到了一些错误。
所以我想知道:是否可以将@ManyToMany 和@ManyToOne 放在实体的同一字段上?
这样不行吗?
SELECT t2.fieldFromTable2, t3.fieldFromTable3
FROM Table2 t2, Table3 t3
WHERE t2.entity1 = t3.entity1;
简短的回答:不,我不相信单个字段可以应用多个关系注释。这似乎是隐含的,因为从概念上讲,关系是两个实体之间的关系。
为了进一步研究您的问题,我认为您误解了基于集合的关系(@OneToMany、@ManyToMany)的使用。当一个实体与另一个实体的多个 实例 相关时,就会发生这些情况,即 table1 中的一行可以连接到 table2 中的多行。如果table1也和table3相关,那就是完全独立的关系了。
OneToMany 示例是一个学生可以发送多封电子邮件,但每封特定电子邮件只能由一个学生发送。
一个多对多的例子是每门大学课程都有很多学生,每个学生选修多门课程。
如果我们还想知道学生在所有课程中需要哪些书籍,那将与其他关系分开推导。
在 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 Table2.object_id = Table3.object_id;
上的内连接表 3因此,我认为我必须使用@ManyToMany。但是我遇到了一些错误。
所以我想知道:是否可以将@ManyToMany 和@ManyToOne 放在实体的同一字段上?
这样不行吗?
SELECT t2.fieldFromTable2, t3.fieldFromTable3
FROM Table2 t2, Table3 t3
WHERE t2.entity1 = t3.entity1;
简短的回答:不,我不相信单个字段可以应用多个关系注释。这似乎是隐含的,因为从概念上讲,关系是两个实体之间的关系。
为了进一步研究您的问题,我认为您误解了基于集合的关系(@OneToMany、@ManyToMany)的使用。当一个实体与另一个实体的多个 实例 相关时,就会发生这些情况,即 table1 中的一行可以连接到 table2 中的多行。如果table1也和table3相关,那就是完全独立的关系了。
OneToMany 示例是一个学生可以发送多封电子邮件,但每封特定电子邮件只能由一个学生发送。
一个多对多的例子是每门大学课程都有很多学生,每个学生选修多门课程。
如果我们还想知道学生在所有课程中需要哪些书籍,那将与其他关系分开推导。