使用关键字的 Hibernate 命名查询 (HQL) 搜索
Hibernate Named Query (HQL) search with keyword
我想创建一个查询,其中能够根据人全名或人用户名的通配符搜索来搜索人名。
其实我很困惑。你说你的实体 class 被命名为 PersonEntity.java 而你的 HQL 查询选择了 Operson。
在 HQL 中,您查询的是 Java 对象而不是实际的 table。无论如何,我假设您的实体名为 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();
}
}
注:
- 使用参数时,不要在 HQL 查询中包含通配符。通过 setParameter() 设置实际参数时使用通配符。
- 你的方法应该return列表
我想创建一个查询,其中能够根据人全名或人用户名的通配符搜索来搜索人名。
其实我很困惑。你说你的实体 class 被命名为 PersonEntity.java 而你的 HQL 查询选择了 Operson。
在 HQL 中,您查询的是 Java 对象而不是实际的 table。无论如何,我假设您的实体名为 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();
}
}
注:
- 使用参数时,不要在 HQL 查询中包含通配符。通过 setParameter() 设置实际参数时使用通配符。
- 你的方法应该return列表