s0v*_*vet 1 java hibernate join
我遇到了这种情况的问题(我会试着让它变得更容易) - 我的数据库中有用户列出了角色列表和状态列表.
public class User implements Serializable {
@ManyToMany(cascade = CascadeType.ALL, fetch= FetchType.LAZY)
@JoinTable(name = "role_to_user",
joinColumns={@JoinColumn(name = "user_id")},
inverseJoinColumns={@JoinColumn(name = "role_id")})
private Set<Role> roles = new LinkedHashSet<Role>();
@ManyToMany(cascade = CascadeType.ALL, fetch= FetchType.LAZY)
@JoinTable(name = "status_to_user",
joinColumns={@JoinColumn(name = "user_id")},
inverseJoinColumns={@JoinColumn(name = "status_id")})
private Set<Status> statuses = new LinkedHashSet<Status>();
}
Run Code Online (Sandbox Code Playgroud)
我正在尝试创建一个hibernate标准,该标准能够使用指定的角色和状态返回用户(在使用角色表和状态表加入之后).就像是 :
返回role = 1或role = 2且status = 1的用户
我google了一些东西,现在我可以创建一个查询,只返回指定角色的用户,但不是状态.
Criteria cr = session.createCriteria(User.class)
.createCriteria("roles")
.add(Restrictions.or(Restrictions.eq("roletype", 1), Restrictions.eq("roletype", 2)));
Run Code Online (Sandbox Code Playgroud)
表用户和角色通过role_to_user表与两列(user_id,role_id)连接,类似于表用户和状态通过status_to_role表
谢谢你的建议 :)
JB *_*zet 14
Criteria cr = session.createCriteria(User.class, "user")
.createAlias("user.roles", "role", Criteria.INNER_JOIN)
.createAlias("user.statuses", "status", Criteria.LEFT_JOIN);
cr.add(Restrictions.or(
Restrictions.eq("role.roletype", 1),
Restrictions.and(
Restrictions.eq("role.roletype", 2),
Restrictions.eq("status.statusType", 1))));
Run Code Online (Sandbox Code Playgroud)