2012-02-11 6 views
5

QueryDSL을 사용하여 쿼리를 생성하는 데 문제가 있습니다. ID로 특정 사용자의 모든 그룹을 검색하려고합니다. 어떻게 작동합니까?many to many 매핑을 사용하여 QueryDSL JPA로 쿼리 작성하기

public List<Group> findGroupsByUser(Integer userId) { 
    JPQLQuery query = new JPAQuery(getEntityManager()); 
    ?????? 
    return result; 
} 

매핑 된 클래스 :

@Entity(name = "user") 
    public class User { 

    @Id 
    private int id; 
    private String login; 
    @ManyToMany 
    @JoinTable(name = "user2group", joinColumns = @JoinColumn(name = "uid"), inverseJoinColumns = @JoinColumn(name = "gid")) 
    private Set<Group> groups; 
    ... 
} 


@Entity(name = "group") 
public class Group { 

    @Id 
    private int id; 
    private String name; 
    @ManyToMany 
    @JoinTable(name = "user2group", joinColumns = @JoinColumn(name = "uid"), inverseJoinColumns = @JoinColumn(name = "gid")) 
    private Set<User> users; 
    ... 
} 

데이터베이스 테이블 : 다음과 같은

create table group(
    id int(10) not null auto_increment primary key, 
    name varchar(255) not null, 
    creationdate datetime not null, 
    creator int(10) not null, 
    privacy enum('PUBLIC', 'PRIVATE') not null, 
    constraint foreign key (creator) references user(id) 
) 

create table user2group(
    uid int(10) not null, 
    gid int(10) not null, 
    primary key (uid, gid), 
    constraint foreign key (uid) references user(id), 
    constraint foreign key (gid) references group(id) 
) 

create table user(
    id int(10) not null auto_increment primary key, 
    lastname varchar(50) not null, 
    firstname varchar(50) not null, 
    createdate datetime not null, 
    login varchar(100) unique not null, 
    password varchar(40) not null 
) 
+0

아래에서이 솔루션은 괜찮 았는데. 그룹의 사용자가 올바르게 매핑되지 않았습니다. @JoinTable (mappedBy = groups) 개인 설정 사용자; – problemzebra

답변

8

뭔가 일을해야는

from(user).innerJoin(user.groups, group) 
    .where(user.id.eq(userId)) 
    .list(group); 
+2

QueryDSL 4.0.8에서'list()'를'select()'로 변경하십시오. – FuzzY