【问题标题】:JPQL and Join TableJPQL 和连接表
【发布时间】:2012-11-09 06:15:43
【问题描述】:

我对 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]

编辑:糟糕,我忘了将按用户 ID 搜索的部分添加到查询中。我想获取用户所属的所有组。

但我就是无法正确地获取语法。任何帮助将不胜感激。

相关代码sn-ps:

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;

}

用户.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;
}

【问题讨论】:

    标签: java jpa jpql


    【解决方案1】:

    使用 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 是您的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);
    

    最好使用SetSortedSet(或者如果用户可以多次在同一个组中,则可以使用List)而不是Collection

    【讨论】:

      猜你喜欢
      • 2016-03-10
      • 2012-11-17
      • 2012-01-08
      • 1970-01-01
      • 2015-03-04
      • 1970-01-01
      • 2018-10-10
      • 2016-01-22
      • 2016-05-13
      相关资源
      最近更新 更多