2015-10-07 42 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