java - Spring JPA Data ManyToOne 列排序与子实体属性,也允许空值
问题描述
有两个表,例如 Employee 和 Address 实体。我需要按地址实体国家名称排序。我使用过按
国家名称排序的“address.country”。但是在 Employee 表中删除空地址行。需要保留 address_pk 为空的行以及基于国家名称的排序行
@Entity
@Table(name = "employee")
public class Employee {
private Address address;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "address_pk", nullable = true)
public Address getAddress() {
return address;
}
public void setAddress(Address address) {
this.address = address;
}
}
解决方案
如果您使用这样的 JPA 默认方法:
employeeRepository.findAll(sort);
那么自动生成的查询将使用内部连接。因此,员工没有地址引用的所有行都将从结果中排除。
您必须创建一个自定义查询,例如:
@Query(value="select e from Employee e LEFT JOIN e.address a ORDER BY a.country");
Page<Employee> findAllSorted();
推荐阅读
- fortran - 这个语法在 fortran 中是什么意思?
- laravel - Laravel - 限制用户的帖子数量
- ios - 如何在 Flutter 中覆盖supportedInterfaceOrientations?
- character-encoding - Notepad++更新到Windows 10 18363.592后无法显示汉字
- php - 重试模式,如何确定 PHP 中的失败类型
- database - 在规范化之前将原始表划分为子表?
- python - 如何在 Ebay 中迭代页面
- vue.js - Vuepress 部署到 Netfly 失败
- python-3.x - 我怎样才能得到一个特定的字符串?
- sql - Redshift 根据 CASE 语句在查询期间将字符插入字符串