我有两个实体User和Attribute,它们有多对多的关系。如下。
public class User implements java.io.Serializable {
private Set<Attribute> attributes = new HashSet<>();
@ManyToMany(cascade=CascadeType.ALL)
@JoinTable(name = "user_attributes", joinColumns = { @JoinColumn(name = "user_id") },
inverseJoinColumns = { @JoinColumn(name = "attribute_id") })
public Set<Attribute> getAttributes() {
return attributes;
}
}
User_Attributes表可能包含也可能不包含数据。我正在尝试获取下面的用户
public User getUserByUserNameAndStatus(String userName, int status) {
Criteria criteria = getSession().createCriteria(User.class);
criteria.createAlias("attributes", "attr", JoinType.LEFT_OUTER_JOIN);
criteria.setFetchMode("roles", FetchMode.JOIN);
criteria.add(Restrictions.eq("attr.status", 1));
criteria.add(Restrictions.eq("userName", userName));
criteria.add(Restrictions.eq("status", status));
User user = (User) criteria.uniqueResult();
return user;
}
只有在User_Attributes表中有条目时,此代码才返回用户对象,否则返回null。但是,如果User_Attributes表中没有条目,我还想获取用户对象。