我在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来构建查询,但这要复杂得多;而且我还没有经常使用它,因此无法提供示例。

10-08 09:41