2016-04-17 7 views
1

JPQLを使用して次のクエリを実行したい。JPAを初めて使用し、JPQLを学習したが、このクエリでスタックした。複数の条件とその他の関係を持つサブクエリ用のjpqlクエリの作成方法

SELECT * FROM users 
WHERE userid NOT IN (SELECT userid FROM applicants) 
AND gender = 'MALE' AND (firstname like '%R%' OR lastname like '%S%'); 

ここで、性別と名前のパラメータは動的に渡されますが、ここでは静的にしています。

私のクラスのスニペットは、次のとおりです。 この私のユーザークラスです
ユーザークラス:

@Table(name = "users") 
public class User{ 

@Id 
@GeneratedValue 
private long userId; 

@Column(unique = true, nullable = false) 
private String email; 

private String firstName; 

private String middleName; 

private String lastName; 

private String gender; 

private Timestamp appliedOn; 
} 

申請クラスはUserクラスとOneToOne関係を持っており、結合列をユーザーIDです。

申請者クラス:

@Entity 
@Table(name = "applicants") 
public class Applicant{ 

@Id 
private long applicantId; 

@OneToOne 
@JoinColumn(name = "userId") 
private User user; 

@ManyToOne 
@JoinColumn(name = "subCourseId") 
private SubCourse course; 

@ManyToOne 
@JoinColumn(name = "collegeId") 
private College college; 
} 

答えて

2

あなたはLEFTと、達成可能な達成したいものではありません登録しよう:

SELECT * FROM users 
LEFT JOIN applicants ON users.userid = applicants.userid 
WHERE applicants.userid IS NULL 
AND gender = 'MALE' AND (firstname like '%R%' OR lastname like '%S%'); 

またはNOT IN:

SELECT * FROM users 
WHERE userid NOT IN (SELECT userid FROM applicants) 
AND gender = 'MALE' AND (firstname like '%R%' OR lastname like '%S%'); 

場合はい、そこからあなたの答えが見つかるはずです。そのSQL

SELECT * FROM users 
WHERE userid NOT IN (SELECT userid FROM applicants) 
AND gender = 'MALE' AND (firstname like '%R%' OR lastname like '%S%'); 

ため

+0

あなたがその答えに満足している場合はそう私はしてくださいマーク、 –

+0

こんにちはRidhamありがとうこのようにクエリを使用する必要がありますそれは最高のものなので、コミュニティはこの質問が処理されていることを知っています。ありがとうございました:) –

+0

これは悲しいことですが、私はあなたがしていることを確信しています。1:http://stackoverflow.com/help/privileges/create-posts "受け入れられた回答としてマーク":D –

0

JPQLクエリは次のようになります。

String jpql = "SELECT us FROM User us WHERE us.userId NOT IN (SELECT appl.user.userId FROM Applicant appl) AND us.gender = ?1 AND (us.firstName LIKE ?2 OR us.lastName LIKE ?3)"; 
Query query = entityManager.createQuery(jqpl); 
query.setParameter(1, "MALE"); 
query.setParameter(2, "%R%"); 
query.setParameter(3, "%S%"); 
query.getResultList(); 
+0

ありがとうございます。私はエイリアスで混乱していた –

関連する問題