2012-11-21 26 views
5

SQL ve JPQL Benim anlayışım büyük değildir ve aşağıdaki sql deyimi bir JPQL sorgusu oluşturmak için uğraşıyorlar:JPQL ve Üyelik Tablo

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] 

düzenleme: tarafından arama eklemek unuttum Woops kullanıcı kimliği bölümü sorguya. Bir kullanıcının ait olduğu tüm grupları almak istiyorum.

Ancak sözdizimini doğru olarak alamıyorum. Herhangi bir yardım büyük takdir edilecektir.

İlgili kod parçacıkları:

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

Ne yapmaya çalışıyorsunuz? –

cevap

8

JPQL kullanma olurdu:

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 E nerede ntityManager ve user, grup listesinin yükleneceği Kullanıcı sınıfının örneğidir. yalnızca kullanıcı kimliği varsa, ile değiştirin:

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

Kullanımı daha iyi olurdu bir Set veya SortedSet (ya da belki bir List kullanıcı birden fazla kez aynı grupta olabilir varsa) yerine Collection .