2012-11-21 14 views
5

एसक्यूएल और JPQL की मेरी समझ है कि महान नहीं कर रहे हैं और मैं निम्नलिखित एसक्यूएल बयान के एक JPQL क्वेरी बनाने के लिए प्रयास कर रहे हैं:JPQL और सम्मिलित हों तालिका

select group.* from user, user_group, group 
where user_group.user_id = user.id 
and user_group.group_id = group.id 
and user.id = [userID to search] 

संपादित करें: ओह मैं द्वारा खोज जोड़ने के लिए भूल गया क्वेरी में उपयोगकर्ता आईडी भाग। मैं उन सभी समूहों को प्राप्त करना चाहता हूं जो उपयोगकर्ता संबंधित हैं।

लेकिन मुझे सिंटैक्स सही नहीं मिल रहा है। किसी भी तरह की सहायता का स्वागत किया जाएगा।

प्रासंगिक कोड के टुकड़े:

Group.java

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

@Id 
@GeneratedValue 
@Column(name = "id") 
private Integer id; 

@JoinTable(name = "user_group", joinColumns = { 
    @JoinColumn(name = "group_id", referencedColumnName = "id")}, inverseJoinColumns = { 
    @JoinColumn(name = "user_id", referencedColumnName = "id")}) 
@ManyToMany 
private Collection<User> userCollection; 

} 

User.java

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

@Id 
@NotNull 
@GeneratedValue 
@Column(name = "id") 
private Integer id; 

@Column(name = "email", unique=true, nullable=false) 
private String email; 

@ManyToMany(mappedBy = "userCollection") 
private Collection<Group> GroupCollection; 
} 
+0

आप क्या करने की कोशिश कर रहे हैं? –

उत्तर

8

JPQL का उपयोग करना यह होगा:

TypedQuery<Group> query = em.createQuery(
    "SELECT DISTINCT g FROM User u LEFT JOIN u.groupCollection g " + 
    "WHERE u = :user", Group.class); 
query.setParameter("user", user); 
List<Group> = query.getResultsList(); 

जहां em आपके ई है ntityManager और user उपयोगकर्ता श्रेणी का उदाहरण है जिसके लिए समूह सूची लोड करना है। आप केवल प्रयोक्ता आईडी है, तो साथ बदलने के लिए:

TypedQuery<Group> query = em.createQuery(
    "SELECT DISTINCT g FROM User u LEFT JOIN u.groupCollection g " + 
    "WHERE u.id = :user", Group.class); 
query.setParameter("user", userId); 

यह उपयोग करने के लिए बेहतर होगा एक Set या SortedSet (या शायद एक List उपयोगकर्ता एक ही समूह के एक से अधिक बार में हो सकता है तो) के बजाय एक Collection

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