2016-12-06 147 views
0

我有用户和任务。每个用户可以有多组任务,反之亦然。我打电话给任务“成员”中包含的用户,但我没有成员实体,它是隐含的,并通过注释@JoinTable(name = "member"...进行声明。代码:使用关联表的JPQL/HQL查询

@Entity 
public class User { 
    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    @Column 
    private int id; 

    @ManyToMany 
    @JoinTable(name = "member", joinColumns = @JoinColumn(name = "user_id"), inverseJoinColumns = @JoinColumn(name = "task_id")) 
    private Set<Task> tasks = new HashSet<>(); 
} 

@Entity 
public class Task { 
    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    @Column 
    private int id; 

    @ManyToMany(mappedBy = "tasks") 
    private Set<User> users = new HashSet<>(); 

    private Calendar initialDate; 
    private Calendar finalDate; 
} 

我的问题是在JPQL查询,因为我没有一个真正的会员豆(@Entity注释和东西),我不能做任何事情,在我的仓库一样(假设我已经和会员实体至极地图一个用户和任务):

FROM User u 
WHERE NOT EXISTS 
(
FROM Member m WHERE m.task.finalDate >= :inicial AND m.task.finalDate <= :final 
AND m.user.id = u.id//Member here is a hipotetical/nonexistent entity 
) 

即使世界任何方式使用JPQL/HQL或我需要退回到原生SQL查询此查询? Ty

+0

明确JPQL语句开始“选择{}别名” ... –

+0

从未使用选择的HQL查询,这将解决任何我的烦恼呢? –

+0

这意味着您的查询是有效的JPQL,即标准投诉JPA。没有它,他们是没有用的,除了休眠... –

回答

0

我不认为你提供的例子需要引用成员实体(如果存在)。你或许可以这样做:

from User u INNER JOIN u.tasks t WHERE t.finalData < :initial OR t.finalDate > :final 
+0

会员只有一个虚假的实体,它确实不存在于我的项目中,如果它存在就是JPQ查询。泰,我会尝试你的解释。 –