如何查询多对多的关系?

时间:2015-10-04 17:29:35

标签: jpa jpql

所以我在两个不同的实体中得到了很多关系。一个有另一个列表,另一个列有第一个列表。我的问题是如何使查询占用实体的一个字段+集合。例如,教授和项目有很多相关,如何获得所有教授的名字+他们参与的项目?如果你有深刻和广泛的想法分享请。感谢

1 个答案:

答案 0 :(得分:0)

您可以使用JP QL预测,选择教授的名称以及与教授关联的项目实体的属性。使用您的示例:

@Entity
public class Professor {
  private Long id;
  private String name;
  private Collection<Projects> projects;
  ...
}

@Entity
public class Project {
  private Long id;
  private String status;
  private Collection<Professor> professors;
  ...
}

示例数据: 你的教授表有两排:
1个马克
约翰二书

您的项目表有4行:
1。一种DELAYED
2个B已完成
3 C ON-TRACK
4 d COMPLETED

JOIN表(第一列是教授ID,第二列是项目ID):
1个
1个2
2个3
2个4

您的JPA查询将如下:

SELECT prof.name, proj.name, proj.status FROM Professor prof JOIN prof.projects proj

然后结果将是:
标记的延迟
标记B已完成
约翰·C·ON-TRACK
约翰d COMPLETED

但是,如果您尝试在教授名称及其项目集合上使用投影,则在JP QL中无法实现。 JP QL仅允许SELECT子句中的单值路径表达式。

示例:这不是有效的JP QL查询,因为prof.projects是一个集合值路径表达式。

SELECT prof.name, prof.projects FROM Professor prof