我正在使用JPA和PostgreSQL一起玩,并且在创建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%'
其中name是密钥
由于名称列名称中的appostrophe(&#39;),上面的查询给出了一个空列表
我的问题是如何删除列名(&#39; name&#39;)中的appostrophe(&#39;),以便我得到正确的结果?
答案 0 :(得分:1)
您无法参数化对象名称。参数仅适用于值。您需要在查询本身中包含key
(这可能会打开您的SQL注入!)。
所以你需要这样做:
List<Jobseekers> empList = JPA.em().createQuery("FROM Jobseekers WHERE " +
key + " LIKE :keyvalue")
.setParameter("keyvalue", "%"+keyvalue+"%")
.getResultList();
另一种选择是使用条件API来构建查询,但这要复杂得多;我没有经常使用它,所以我不能提供一个例子。