【问题标题】:Hibernate Criterion - join between more tablesHibernate Criterion - 连接更多表
【发布时间】:2012-06-14 08:59:39
【问题描述】:

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

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

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

返回角色 = 1 或角色 = 2 且状态 = 1 的用户

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

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

表用户和角色通过role_to_user表连接两列(user_id,role_id),类似地通过status_to_role表表用户和状态

感谢您的建议:)

【问题讨论】:

    标签: java hibernate join


    【解决方案1】:
    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))));
    

    【讨论】:

    • 非常感谢!工作完美。
    • 谢谢节省我的时间!:)
    猜你喜欢
    • 2013-02-11
    • 1970-01-01
    • 1970-01-01
    • 2011-10-08
    • 1970-01-01
    • 2013-12-30
    • 1970-01-01
    • 2016-10-23
    • 2015-01-29
    相关资源
    最近更新 更多