2012-11-21 4 views
5

私の理解では、その偉大ではないと、私は次のSQL文のJPQLクエリを作成しようとしている:JPQLそしてSQLと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] 

編集:私はすることで、検索を追加するのを忘れWoopsユーザーID部分を照会に追加します。ユーザーが所属するすべてのグループを取得したいと考えています。

しかし、正しい構文を取得できません。どんな助けでも大歓迎です。

関連するコードスニペット:JPQLを使用して

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

それは次のようになります。

emがあなたのEである
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(); 

ntityManagerおよびuserは、グループリストをロードするUserクラスのインスタンスです。あなたが唯一のユーザIDをお持ちの場合は、で変更します。

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