2016-09-03 2 views
1

Dies ist mein CodeKann Abfrage mehrmals neu initialisiert werden?

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>(); 

und die Ausnahme, die ich bin immer ist -

org.hibernate.QueryException: Nicht alle benannten Parameter

Aber ich festgelegt wurden Habe alle Parameter korrekt eingestellt, so ist mein Zweifel, dass aufgrund der Neuinitialisierung von Query mehrfach das Problem verursacht wird. Entschuldigung, wenn ich falsch liege.

Antwort

0

Es gibt keinen Grund, plain sql zu verwenden, wenn Sie explizit die Hibernate-Sitzung verwenden, Criteria api oder HQL wäre eine bessere Wahl. Wenn Sie herstellerunabhängig bleiben möchten, können Sie JPA named queries verwenden.

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

** @ Journeycorner ** Ich habe es ausprobiert und war erfolgreich, danke –

+0

@ArunSudhakaran akzeptieren Sie bitte die Antwort – Journeycorner

+0

Leider habe ich vergessen \t @Journeycorner –

0

Die session.createQuery(sqlQuery); kehren Sie neue Abfrage-Objekt:

Um Ihr Problem, Refactoring Code wie folgt zu lösen. Sie setzen nur einen Parameter auf ein Abfrageobjekt in Ihrem if-Block. Im zweiten if-Block setzen Sie den Parameter nicht auf das gleiche Query-Objekt, das Sie im ersten if-Block angelegt haben. Dein Code hat einen Fehler.

Verwandte Themen