2016-12-06 5 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; 
} 

私の問題は、私は人が本当の豆(@Entity注釈付きとか)を持っていけないので、私は私が持っているとメンバー実体ウィッヒマップと仮定すると、(ように私のリポジトリに何もできない、JPQLクエリでありますユーザーとタスク):

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クエリにフォールバックする必要がありますを使用して、このクエリにする方法をTheresの? Ty

+0

明確JPQL文は「{別名を} SELECT」始まる... –

+0

はHQLでの選択を使用したことがない、それは私の悩みのいずれかを解決する、照会? –

+0

これは、有効なJPQL、つまり標準に準拠するJPAであることを意味します。それがなければ、彼らはHibernate以外では役に立たない。 –

答えて

0

メンバーエンティティ(存在する場合)を参照する必要があるとは限りません。あなたは、おそらくのような何かを行うことができます:

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

メンバーには偽のエンティティしかありません。それがJPQクエリであれば、私のプロジェクトには本当に存在しません。タイ、私はあなたの説明を試みます。 –

関連する問題