多对多关系中没有项目的实体的 JPQL

Posted

技术标签:

【中文标题】多对多关系中没有项目的实体的 JPQL【英文标题】:JPQL for Entities with No Items in ManyToMany Relationship 【发布时间】:2010-12-04 10:25:25 【问题描述】:

简单的 JPA/JPQL 问题。我有一个具有多对多关系的实体:

@Entity
public class Employee       
  @ManyToMany
  @JoinTablename="employee_project"
      joinColumns=@JoinColumn(name="employee_id"
      inverseJoinColumns=@JoinColumn(name="project_id")
  private List<Project> projects;

返回所有没有任何项目的员工的 JPQL 查询是什么?

【问题讨论】:

【参考方案1】:
from Employee e where not exists elements(e.projects)

from Employee e where size(e.projects) = 0

【讨论】:

嗯。我收到第一个错误(“异常描述:使用 Eclipselink 解析查询的语法错误...”),但第二个似乎像宣传的那样工作。 第一个是无效的 JPQL ... EXISTS 需要一个子查询来跟随 @Andy - 你说得对,elements() 似乎不在 JPA 规范中,它是一个 Hibernate 扩展。【参考方案2】:

JQPL 确实有专门的IS [NOT] EMPTY 比较运算符来检查集合是否为空:

SELECT e FROM Employee e WHERE e.projects IS EMPTY

【讨论】:

以上是关于多对多关系中没有项目的实体的 JPQL的主要内容,如果未能解决你的问题,请参考以下文章

JPQL 多对多 Dto 选择失败

多对多查询 jpql

JPQL在多对多关系上左外连接

JPQL 基于条件的多对多连接

JPQL查询多对多连接表

具有多对多关系的 JPQL 查询