criteriabuilder notequal函数不会为多个类返回空值

6ie5vjzr  于 2021-07-12  发布在  Java
关注(0)|答案(1)|浏览(761)

我有两门课如下

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'
    ...
}

我需要得到所有的用户不是主人或没有角色。为了做到这一点,我尝试了类似的东西,但没有工作。

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

但这不会返回没有角色值(role\u id==null)的用户。我也试过,但也不管用。

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

如何使role为null或role.ismaster等于“n”这样的查询

yr9zkbsy

yr9zkbsy1#

为了解决这个问题,我让我的查询左连接。有了这个,我可以取空值。

Root<User> root = q.from(User.class);
root.join(User_.role,JoinType.LEFT);

相关问题