Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jpa 如何查询多对多关系?_Jpa_Jpql - Fatal编程技术网

Jpa 如何查询多对多关系?

Jpa 如何查询多对多关系?,jpa,jpql,Jpa,Jpql,所以我得到了两个不同实体中的多对多关系。一个有另一个的列表,另一个有第一个的列表。我的问题是如何进行以实体+集合的一个字段为对象的查询。例如,教授和项目是多对多的,如何获得所有教授的姓名+他们参与的项目?如果你有想法,请广泛深入地分享。谢谢您可以使用JP QL Projections,选择教授的姓名以及与教授关联的项目实体的属性。以您的例子: @Entity public class Professor { private Long id; private String name;

所以我得到了两个不同实体中的多对多关系。一个有另一个的列表,另一个有第一个的列表。我的问题是如何进行以实体+集合的一个字段为对象的查询。例如,教授和项目是多对多的,如何获得所有教授的姓名+他们参与的项目?如果你有想法,请广泛深入地分享。谢谢

您可以使用JP QL Projections,选择教授的姓名以及与教授关联的项目实体的属性。以您的例子:

@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;
  ...
}
那么结果将是:
MarkADELAYED
标记b已完成
约翰森赛道
约翰德已完成

但是,如果您试图在Professor名称及其项目集合上使用投影,则在JP QL中不可能使用投影。JP QL只允许在SELECT子句中使用单值路径表达式

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

SELECT prof.name, prof.projects FROM Professor prof
SELECT prof.name, prof.projects FROM Professor prof