2012-02-11 35 views
5

Tôi gặp sự cố khi sử dụng QueryDSL để tạo truy vấn. Tôi muốn truy xuất tất cả các nhóm của một người dùng nào đó bằng id của nó. Điều này hoạt động như thế nào?Viết truy vấn với QueryDSL JPA với nhiều đối tượng ánh xạ

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

lớp ánh xạ:

@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; 
    ... 
} 

Cơ sở dữ liệu bảng:

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

Các giải pháp từ bên dưới làm việc tốt. Người dùng trong nhóm không được lập bản đồ chính xác. @JoinTable (mappedBy = nhóm) riêng Đặt người dùng; – problemzebra

Trả lời

8

Something như sau nên làm việc

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

Trong QueryDSL 4.0.8, thay đổi 'list()' thành 'select()'. – FuzzY

Các vấn đề liên quan