【问题标题】:JPA - Writing join query with 2 foreign keysJPA - 使用 2 个外键编写连接查询
【发布时间】:2020-11-25 10:47:30
【问题描述】:

我有 2 个实体:

@Entity
@Table(name = "HOUSE")
public class House {
  //other fields
  @ManyToOne
  @JoinColumn(name = "OWNER_1", referencedColumnName = "OWNER_ID")
  private Owner owner1;

  @ManyToOne
  @JoinColumn(name = "OWNER_2", referencedColumnName = "OWNER_ID")
  private Owner owner2;
}

@Entity
@Table(name = "OWNER")
public class Owner {
  @Id
  @Column(name = "OWNER_ID")
  private String id;
}

我有这样的 SQL 查询来连接 2 个表:

select a.*, b.* from HOUSE a INNER JOIN OWNER b on a.OWNER_1 = b.OWNER_ID or a.OWNER_2 = b.OWNER_ID

但我不知道如何在 JPA 查询中编写它。有人可以帮忙吗?

【问题讨论】:

    标签: java hibernate jpa orm jpql


    【解决方案1】:

    JPA 查询将非常相似:

    select a, b 
    from House a, Owner b 
    where a.owner1.id= b.id or a.owner2.id = b.id
    

    请记住,查询的结果将是 List<Object[2]>,您必须自己解析。

    【讨论】:

    • 但是您提供的 WHERE 条件是否与 INNER JOIN 相同。我虽然关于您的解决方案,但我听说有人说 WHERE 实际上不是 JOIN 并且性能不好。
    • 得到您的关注。您正在通过 ids 进行比较,尽管它应该被索引(即使默认情况下在大多数 RDBMS 上也是如此)。 JPQL 与普通 SQL 有点不同,我认为这就是在这种非标准场景中您可以从中挤出的全部内容。您总是可以进行本机查询,但这应该是您最后的手段
    猜你喜欢
    • 2020-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-05
    • 2012-05-15
    • 2021-05-22
    • 2014-09-24
    • 1970-01-01
    相关资源
    最近更新 更多