2017-05-25 55 views
1

我試圖從學生表中檢索學生對象,但得到null即使表數據退出,Hibernate會返回null

public Student getStudentbyStudentName(String studentName) { 
     final String query = "from Student s where s.studentName = '" + studentName + "'"; 
     return (Student)sessionFactory.getCurrentSession().createQuery(query).uniqueResult(); 
    } 

我也試過以下檢索studentName的學生對象。它工作,直到我的網頁刷新。當頁面刷新時,以下返回null。請幫忙。

public Student getStudentbyStudentName(String studentName) { 
    return (Student) sessionFactory.getCurrentSession() 
     .createCriteria(Student.class) 
     .add(Restrictions.eq("studentName", studentName)) 
     .uniqueResult(); 
} 
+3

SQL注入仍然是一個事?祝一位名叫'羅伯特'的學生好運); DROP TABLE學生; - 和類似的。請閱讀如何使用hibernate執行/寫入查詢,閱讀一個體面的教程,並從那裏去。你的方式會讓你陷入麻煩**快**。 http://bobby-tables.com/java – luk2302

+1

在沒有查詢的情況下添加了代碼。上述代碼一直運行到網頁刷新。當頁面刷新時,即使記錄存在於表格中,上述內容也會返回null。 – tenzin

回答

1

我猜你在傳遞給方法的名字是一種統一的,那麼你應該把額外的參數在你的MySQL連接URL。例如:

jdbc:mysql://localhost:3306/db1?useUnicode=true&characterEncoding=UTF-8 

其次,但重要。您的第一個代碼片段容易受到SQL注入攻擊。請使用標準的API(你的第二段)或準備查詢:所有通過setParameter(...)方法

from Student s where s.studentName = :name 

在連詞

+0

嗨,感謝您的信息。我確實嘗試了第二個片段。第二個代碼有效,直到我的頁面刷新。當頁面刷新時,即使記錄存在於表格中,上述內容也會返回null。 – tenzin

+0

您可以在該方法中放置一個斷點並在刷新後確認參數studenName的值嗎? – ThanhLoyal

相關問題