Spring JPA Data ManyToOne列使用子实体属性进行排序,并且还允许空值

时间:2019-02-27 08:23:35

标签: java spring hibernate jpa spring-data-jpa

具有两个表,例如Employee和Address实体。我需要按地址实体国家/地区名称排序。我用过的“ address.country”之类的
国家的名字。但是在Employee表中删除空地址行。需要保留address_pk为null的行以及基于国家/地区名称排序的行

@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;
    }
}

1 个答案:

答案 0 :(得分:0)

如果您使用像这样的JPA默认方法:

employeeRepository.findAll(sort);

然后,自动生成的查询将使用inner-join。因此,所有员工没有地址引用的行都将从结果中排除。

您必须创建一个自定义查询,例如:

@Query(value="select e from Employee e LEFT JOIN e.address a ORDER BY a.country");
Page<Employee> findAllSorted();