2011-03-22 72 views
1

我在使用hibernate downcasting query.uniqueResult()中處理問題。我有2個類: - UserBean - 用戶登錄問題downcasting冬眠的查詢

在第一個我有映射所有我的表字段以及處理數據的所有方法。相反,第二個僅表示將存儲在用戶會話中的一些用戶數據。

在我的登錄方法的某個點,我執行查詢,並得到1行(我已經檢查過,如果查詢真的返回一些結果)。關鍵是我不能從Object類型(即query.uniqueResult()類型)向UserLogin類型下降。

有人知道哪個可能是問題嗎?

非常感謝!

這是登錄方法:

public UserLogin login(String email, String password){ 

    Session session = iniHibernate(); 
    UserLogin userLogin = null; 

    try{ 
     session.beginTransaction(); 
     Query query = session.createQuery("select email, name from " 
       + "UserBean u where u.email = :user_email and " 
       + "u.password = :user_password"); 
     query.setString("user_email", email); 
     query.setString("user_password",password);    

     userLogin = (UserLogin) query.uniqueResult(); 

     session.getTransaction().commit(); 
    }catch (Exception e){ 
     System.out.println(e); 
    } 
    return userLogin; 
} 

回答

2

Query.uniqueResults文檔:

的便捷方法,返回與查詢匹配的單一 實例,或者 NULL,如果查詢返回沒有結果。

爲什麼它不工作的原因是因爲你返回一個字符串數組不是我以爲的UserBean被映射到UserLogin

嘗試這樣做:

(String[])query.uniqueResult(); 

或者改變您的查詢來獲取對象:

Query query = session.createQuery("select u from " 
      + "UserBean u where u.email = :user_email and " 
      + "u.password = :user_password"); 

應該讓你開始那。

+0

非常感謝,穆罕默德。我實現了你的建議 (字符串[] = QueryResult中(的String [])query.uniqueResult();) 但我仍然得到以下錯誤(我不停的查詢只名稱和電子郵件字段): - INFO:java.lang.ClassCastException:[Ljava.lang.Object;不能轉換爲[Ljava.lang.String; – LucasM 2011-03-25 08:47:09

+0

如果將其更改爲Object [],它的類型是什麼? – 2011-03-26 06:30:13

+0

Mohamed在最後我將查詢更改爲UserBean對象(如您所建議的),然後我從UserBean數據創建了一個userLogin對象。非常感謝。 – LucasM 2011-03-27 14:35:36

1

我已經如添加實體類型的查詢對象解決它:

Query query = session.createQuery(queryString).addEntity(Foo.class); 
Foo foo = query.uniqueResult(); 

這將很好地工作沒有必要擔心這個問題。