【发布时间】:2021-08-30 14:41:10
【问题描述】:
我使用 Hibernate 作为 JPA 实现并且有两个表:User 和 Agency。
每个Agency 可以有多个用户。 User 可以有 1 个或 0 个 Agency
User
public class User {
@Id
private String userId;
@ManyToOne
@JoinColumn(nullable=true)
@NotFound(action=NotFoundAction.IGNORE)
private Agency agency;
}
Agency
public class Agency {
@Id
private String agencyCd;
private String delFlg; //0 means in use
@OneToMany(mappedBy="agency")
private List<User> userList;
}
在存储库中,查询是
@Query("SELECT DISTINCT u FROM User u LEFT JOIN u.agency a on a.delFlg='0')
我的问题是,左加入 codition(a.delFlg='0') 不起作用。
delFlg 为 1 的机构都包含在结果中。
如何找到 delFlg 为 0 的左联代理用户?
【问题讨论】:
-
可能是
@Query("SELECT DISTINCT u FROM User u LEFT JOIN Agency a on a.delFlg='0'")或@Query("SELECT DISTINCT u FROM User u Where u.agency.delFlg='0'") -
这是因为您使用的是
left join而不是inner join。左连接将过滤结果,但不会影响输出行User。为了确保你得到User和delFlg = 0,你需要使用inner join。
标签: jpa spring-data-jpa left-join jpql