【问题标题】:JPA : field with @ManyToMany and @ManyToOneJPA:带有@ManyToMany 和@ManyToOne 的字段
【发布时间】:2018-03-29 10:09:59
【问题描述】:

在 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 中的查询:

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

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

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

【问题讨论】:

  • 没有。就是不行。完全没有意义。关系只有一种类型
  • 在(Entity1Entity2)之间或(Entity1Entity3)之间没有@ManyToOne,因为Entity2 对象引用了一个且只有一个@ 987654329@ 对象,Entity3 也是如此 ..

标签: java jpa querydsl


【解决方案1】:

简短的回答:不,我不相信单个字段可以应用多个关系注释。这似乎是隐含的,因为从概念上讲,两个实体之间存在关系。

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

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

ManyToMany 示例是每个大学课程都有很多学生,每个学生都选修多门课程。

如果我们还想知道学生的所有课程都需要哪些书籍,那将与其他关系分开推导出来。

【讨论】:

    【解决方案2】:

    这样不行吗?

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

    【讨论】:

    • 是的,这行得通。我只是把事情复杂化了。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2020-02-18
    • 1970-01-01
    • 1970-01-01
    • 2020-05-23
    • 1970-01-01
    • 2011-05-08
    • 2016-11-14
    • 1970-01-01
    相关资源
    最近更新 更多