2012-06-14 7 views
1

나는이 상황에 문제가있다. (더 쉽게하려고 노력할 것이다.) 역할 목록과 상태 목록을 가진 내 DB에 사용자가있다. Hibernate Criterion - 더 많은 테이블 간의 조인

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

나는 특정 역할과 상태로 (후 역할 테이블과 상태 테이블과 조인) 사용자를 반환 할 abble했던 최대 절전 기준을 만들려고하고 있습니다. 뭔가 같은 : 뭔가를 봤 지금은 단지 특정 역할과 나에게 사용자를 반환하는 쿼리를 만들 수 있지만 = 1

역할 = 1 또는 역할 = 2와 상태

반환 사용자 상태.

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

표 사용자 및 역할은 status_to_role 테이블을 통해 유사 같은 방법으로 테이블의 사용자와 상태에있는 두 개의 열 (USER_ID, ROLE_ID)로 role_to_user 테이블을 통해 통보 :

답변

10
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)))); 
에 대한

감사 연결되어

+0

감사합니다. 완벽하게 작동합니다. – s0vet

+0

그런 다음 대답을 수락 하시겠습니까? 예? – ant

+0

감사합니다. 내 시간을 절약하십시오! :) – T8Z

관련 문제