criteriaBuilder notEqual功能不会为manyToOne类返回null值

问题描述

我有两个像下面的课

public class User {

    @Column(name = "EMP_NAME")
    private String name;

    @Column(name = "EMP_PASSWORD")
    private String password;
    
    @ManyToOne
    @JoinColumn(name = "ROLE_ID")
    private Role role;
    ....
}

public class Role {

    @column("ROLE_NAME")
    private String name;

    @column("IS_MASTER")
    String isMaster; // 'Y' or 'N'
    ...
}

我需要让所有不是master或没有角色的用户使用。为此,我尝试了类似的方法,但是没有用。

Predicate nonMaster =  cb.notEqual(root.get("role").get("isMaster"),"Y");
cb.and(nonMaster)

,但这不会返回没有角色值(ROLE_ID == NULL)的用户。我也尝试这样做,但还是行不通。

Predicate nonMaster =  cb.notEqual(root.get("role").get("isMaster"),"Y");
Predicate nullRole =  cb.isNull(root.get("role"));
cb.or(nullRole,nonMaster);

如何进行像角色为null或role.isMaster等于“ N”的查询

解决方法

为解决此问题,我将查询保留为联接。这样我就可以取空值。

request.method != "POST"