2012-02-11 18 views
5

पर कई लोगों के साथ QueryDSL जेपीए के साथ एक प्रश्न लिखना मुझे क्वेरी बनाने के लिए QueryDSL का उपयोग करने में समस्या है। मैं अपने आईडी द्वारा किसी निश्चित उपयोगकर्ता के सभी समूहों को पुनर्प्राप्त करना चाहता हूं। यह कैसे काम करता है?कई मैपिंग

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

नीचे से समाधान ठीक काम किया। समूह में उपयोगकर्ताओं को सही तरीके से मैप नहीं किया जाता है। @ जॉइनटेबल (मैप्डबी = समूह) निजी सेट उपयोगकर्ता; – problemzebra

उत्तर

8

कुछ निम्नलिखित की तरह काम करना चाहिए

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

QueryDSL 4.0.8 में, 'सूची() 'से' select() 'बदलें। – FuzzY

संबंधित मुद्दे