2015-10-07 84 views

回答

1

我其實很困惑。你說你實體類被命名爲PersonEntity.java,但你的HQL查詢從Operson中選擇。

在HQL中,您將針對Java對象而不是實際的表進行查詢。無論如何,我會假設你的實體被命名爲Operson。下面是正確的代碼:

public List<Operson> searchPerson(String keyword) { 
    try { 
     String HQL = "SELECT o FROM Operson o WHERE o.opusername like :username OR o.opname like :name"; 
     return em.createQuery(HQL) 
      .setParameter("username", "%" + keyword.toUpperCase() + "%") 
      .setParameter("name", "%" + keyword.toUpperCase() + "%") 
      .getResultList(); 

    } catch(Exception e) { 
     e.printStackTrace(); 
    } 
} 

注:

  1. 當使用參數,你就不要在您的HQL查詢通配符。在通過setParameter()設置實際參數時使用通配符。
  2. 你的方法應該返回列表
+0

嗨,我已經把錯誤的名稱應該是OPerson.java而不是PersonEntity.java。我已經做出了改變。如果我想要查詢,該怎麼辦:public List searchPerson(String keyword){}。我應該怎麼做? – susu

+0

你在查詢中有2個參數,所以我認爲你應該在你的方法中需要2個參數。你想用關鍵字參數做什麼?將相同的關鍵字傳遞給您的查詢中的用戶名和用戶參數? – Ish

+0

是的。關鍵字use在我的查詢中傳遞給用戶名和用戶參數。那是我混淆的事情。我知道當傳遞2個參數時,我應該把2個參數放在我的方法中。如果我使用關鍵字傳遞2個參數(用戶名和名稱)會怎麼樣? – susu