gpt4 book ai didi

java - Hibernate Criterion - 在更多表之间加入

转载 作者:行者123 更新时间:2023-11-29 09:39:44 24 4
gpt4 key购买 nike

我遇到了这种情况的问题(我会尽量简化)- 我的数据库中有用户具有角色列表和状态列表。

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

我正在尝试创建一个 hibernate 条件,它能够返回具有指定角色和状态的用户(在加入角色表和状态表之后)。像这样的东西:

return users with role = 1 or role = 2 and status = 1

我用谷歌搜索了一些东西,现在我可以创建一个查询,它只返回具有指定角色的用户,而不是状态。

Criteria cr = session.createCriteria(User.class)
.createCriteria("roles")
.add(Restrictions.or(Restrictions.eq("roletype", 1), Restrictions.eq("roletype", 2)));

表user和role通过role_to_user表有两列(user_id,role_id)连接,类似地表user和status通过status_to_role表连接

感谢您的建议:)

最佳答案

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

关于java - Hibernate Criterion - 在更多表之间加入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11029837/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com