我对SQL和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]
Run Code Online (Sandbox Code Playgroud)
编辑:Woops我忘了将用户id部分的搜索添加到查询中.我想获得用户所属的所有群组.
但我只是无法使语法正确.任何帮助将不胜感激.
相关代码段:
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;
}
Run Code Online (Sandbox Code Playgroud)
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;
}
Run Code Online (Sandbox Code Playgroud)
使用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();
Run Code Online (Sandbox Code Playgroud)
em您的EntityManager 在哪里,是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);
Run Code Online (Sandbox Code Playgroud)
最好使用Set或SortedSet(或者List如果用户可以在同一组中多次使用)而不是a Collection.
| 归档时间: |
|
| 查看次数: |
9945 次 |
| 最近记录: |