我对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将搜索添加到查询中。我想获取用户所属的所有组。
但是我只是语法不正确。任何帮助将不胜感激。
相关代码段:
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;
}
使用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类的实例。如果只有用户标识,请更改:
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
。
我正在尝试JPA2.1(eclipselink)中的“treat as”函数,但遇到了一个来自JPA的错误: 异常说明:ReportQuery结果大小不匹配。应为[263],但已检索到[197] 下面是我的JPQL查询(我更改了一些部分,以便更明确): 我们可以看到account和ad_account之间的左外部连接。此外,ad_account表不存在于select子句中。(idApp字段是主键的
假设我有这些类,请注意实体无论如何都不相关。 假定我有一个类,它的属性为,我可以在其中存储一个笔记本ID列表或任何字符串ID。假设有idsPointingToanEntity=[1,2,3],那么这个[1,2,3]在数据库中有一个等效的膝上型计算机条目。 注意:也可以是另一个实体,使不是一个选项
我试图转换这个JPQL查询;
什么是SQL和什么是不同的类型?
我正在编写一个JPQL查询(Hibernate是我的JPA提供程序),以获取一个实体及其几个关联。这适用于我的“简单”的许多关联,比如: Hibernate创建一个查询来获取上述内容,这很好。然而,我的实体也与存储在中间表中的数据有多对多关联,因此这被映射为三个实体之间的和关联。 公司介绍 这是我代码中的三个实体。因此,一个实例有一组实体,每个实体都与一个实例有关系。我希望这是有意义的——否则请检