使用Hibernate Criteria获取多对多集合

时间:2017-10-04 10:16:14

标签: java hibernate

我有两个实体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表中没有条目,我还想获取用户对象。

0 个答案:

没有答案