我在PostgreSQL中使用play with JPA,创建jpql时遇到问题。
下面是我的型号代码
public static List<Jobseekers> search(String key, String keyvalue) {
@SuppressWarnings("unchecked")
List<Jobseekers> empList = JPA.em().createQuery("FROM Jobseekers WHERE :key LIKE :keyvalue").setParameter("key", key).setParameter("keyvalue", "%"+keyvalue+"%").getResultList();
System.out.println("key is"+key);
return empList;
}
所以我的列名在查询中是动态的
创建的sql如下
select * from jobseekers where 'name' like '%akash%'
名字是关键
上面的查询给出了一个空列表,因为名称列名称中有appostrophe(')
我的问题是如何删除列名('name')中的appostrophe('),以便得到正确的结果?
最佳答案
不能参数化对象名称。参数仅用于值。您需要在查询本身中包含key
(这可能会为SQL注入打开大门!).
所以你需要:
List<Jobseekers> empList = JPA.em().createQuery("FROM Jobseekers WHERE " +
key + " LIKE :keyvalue")
.setParameter("keyvalue", "%"+keyvalue+"%")
.getResultList();
另一种选择是使用criteria API来构建查询,但这要复杂得多;而且我还没有经常使用它,因此无法提供示例。