2017-08-30 21 views
0

を休止状態使用:条件と私は次のクエリ持っ

@NamedQuery(name = "User.findByParams", query= 
    "SELECT * 
    FROM User user 
    WHERE user.name type = :inputType") 

を私は入力が供給されている場合にのみ行われますAND文を、追加したい:

@NamedQuery(name = "User.findByParams", query= 
    "SELECT * 
    FROM User user 
    WHERE user.name type = :inputType AND (:ageInput != null AND user.age > :ageInput") 

それがあればということを意味ageInputが指定されていれば、そのフィルタも同様にフィルタリングされます。そうでない場合は、このパラメータを無視します。何か案は?

アイデア?

+2

基準を使用することができない、書きました。これのために 'Criteria' APIを使用してください – XtremeBaumer

+0

SQLの方法では不可能です! @XtremeBaumerはJPA2のように、 – elrado

+1

'... AND(:ageInput == null OR user.age>:ageInput)' –

答えて

0

ageInputがコードで提供されているかどうかをチェックする必要があります。そのため、異なるメソッドを呼び出す必要があります。 ageInputが指定されている場合は、ageInputという制約を持たないageInput制約/呼び出しメソッドを持つメソッドを呼び出す必要があります。

また、述部を使用してクエリを実行することもできます。前のスピーカーとして

1

あなたは(私の知る限り)という名前のクエリで

Criteria criteria = createCriteria() 
     .add(Restrictions.eq("type", type)); 

if (ageInput != null) { 
    criteria.add(Restrictions.eq("ageInput", ageInput)); 
} 

List<User> list = criteria.list(); 

かのSQLQuery

String sql = "SELECT * " + 
     "FROM User user " + 
     "WHERE user.type = :inputType "; 

sql += (ageInput != null) ? "AND ageInput = :ageInput " : ""; 

Query query = sessionFactory.getCurrentSession().createSQLQuery(sql) 
     .setParameter("inputType", inputType); 

if(ageInput != null) { 
    query.setParameter("ageInput", ageInput); 
} 

return (List<User>) query.list(); 
+1

のためにCriteria APIを使用できます。SQLインジェクションを慎重に検討してください。フレームワーク/休止状態 –

関連する問題