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

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

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);

我如何使查询像role为null或role.isMaster等于"N〃;

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

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

最新更新