有一个表users
&words
多对多的关系。还有一个链接表,嗯,例如users_words
(出乎意料,对吧?)你如何Criteria
在以下帮助下做出这样的选择:
select *
from words
left join users_words on users_words.word_id = words.id
where users_words.user_id = {id} or
users_words.id is null'
据我了解它hibernate
连接通过inner join
但我需要left
。
public class Group implements DomainModel{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Long id;
...
@ManyToMany(fetch = FetchType.LAZY, cascade = CascadeType.REFRESH)
@JoinTable(name = "user_groups", joinColumns = {
@JoinColumn(name = "group_id") },
inverseJoinColumns = { @JoinColumn(name = "user_id") })
private Set<User> users = new HashSet<User>(0);
}
public class User implements DomainModel{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Long id;
...
@ManyToMany(fetch = FetchType.LAZY, mappedBy = "users")
private Set<Group> groups = new HashSet<Group>(0);
}
{
Criteria criteria = session.createCriteria(Group.class);
criteria.setFetchMode("users", FetchMode.JOIN);
criteria.createAlias("users","usersAlias");
criteria.add(Restrictions.isNull("users.id"));
}
是这样的:
选择所有没有人所属的组和没有人所属的组,以及ID = 1的用户所属的组。