在postgresql的jpql查询中参数化对象名

时间:2014-12-22 12:47:20

标签: java sql postgresql jpa playframework-2.2

我正在使用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;),以便我得到正确的结果?

1 个答案:

答案 0 :(得分:1)

您无法参数化对象名称。参数仅适用于值。您需要在查询本身中包含key(这可能会打开您的SQL注入!)。

所以你需要这样做:

List<Jobseekers> empList = JPA.em().createQuery("FROM Jobseekers WHERE " + 
        key + " LIKE :keyvalue")
    .setParameter("keyvalue", "%"+keyvalue+"%")
    .getResultList();

另一种选择是使用条件API来构建查询,但这要复杂得多;我没有经常使用它,所以我不能提供一个例子。