2016-09-03 2 views
1

は、これは私のコードクエリを複数回初期化できますか?

session = HibernateUtil.getSession(); 
String sqlQuery = "from FacultyAchievements fa where fa.isActive = 1"; 
Query query = session.createQuery(sqlQuery); 
if(facultyAchievementsForm.getFilterAcademicYear() != null && !facultyAchievementsForm.getFilterAcademicYear().isEmpty()) 
{ 
    sqlQuery += " and fa.academicYear = :academicYear"; 
    query = session.createQuery(sqlQuery); 
    query.setString("academicYear",facultyAchievementsForm.getFilterAcademicYear()); 
} 
if(facultyAchievementsForm.getEmployeeId() != null && !facultyAchievementsForm.getEmployeeId().isEmpty())  
{ 
    sqlQuery += " and fa.employee.employee.id = :employeeId"; 
    query = session.createQuery(sqlQuery); 
    query.setInteger("employeeId", Integer.parseInt(facultyAchievementsForm.getEmployeeId())); 
} 
List<FacultyAchievements> achivementsList = query.list(); 
session.flush(); 
if(achivementsList != null) 
    return achivementsList; 
else 
    return new ArrayList<FacultyAchievements>(); 

と私は取得しています例外である -

org.hibernate.QueryException:しかし、私は「すべての名前付きパラメータが設定されているわけではありません

すべてのパラメータを正しく設定しているので、私の疑問は、Queryの再初期化が原因で複数回問題が発生していることです。私が間違っている場合は申し訳ありません。

答えて

0

明示的にHibernateセッションを使用している場合は、Criteria apiまたはHQLの方がよいでしょう。ベンダーに依存しないようにしたい場合は、JPA named queriesを使用することができます。

このようなあなたのコードをリファクタリング、あなたの問題を解決するために:あなたの新しいクエリオブジェクト

if (a) 
    sqlQuery += "a..."; 
if (b) 
    sqlQuery += "b..."; 
query = session.createQuery(sqlQuery); 
if (a) 
    query.setParam(... 
if (b) 
    query.setParam(... 
+0

** @ Journeycorner **私はそれを試してみましたが、成功したましたが、あなたに –

+0

@ArunSudhakaranに感謝の答えを受け入れてください – Journeycorner

+0

申し訳 \t @Journeycorner –

0

session.createQuery(sqlQuery);戻ります。 ifブロックのクエリオブジェクトに1つのパラメータのみを設定しています。 2番目のifブロックでは、最初のifブロックで作成した同じクエリーオブジェクトにparamを設定しません。コードにバグがあります。私は忘れてしまった

関連する問題