Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/342.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 参数化postgresql的jpql查询中的objectname_Java_Sql_Postgresql_Jpa_Playframework 2.2 - Fatal编程技术网

Java 参数化postgresql的jpql查询中的objectname

Java 参数化postgresql的jpql查询中的objectname,java,sql,postgresql,jpa,playframework-2.2,Java,Sql,Postgresql,Jpa,Playframework 2.2,我在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

我在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;
    }
其中name是关键

由于名称列名称中的appostrophe('),上述查询提供了一个空列表


我的问题是如何删除列名('name')中的appostrophe('),以便获得正确的结果?

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

所以你需要做:

List<Jobseekers> empList = JPA.em().createQuery("FROM Jobseekers WHERE " + 
        key + " LIKE :keyvalue")
    .setParameter("keyvalue", "%"+keyvalue+"%")
    .getResultList();
List empList=JPA.em().createQuery(“从求职者那里”+
key+“LIKE:keyvalue”)
.setParameter(“keyvalue”、“%”+keyvalue+“%”)
.getResultList();

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

你的问题不是如何避开撇号,你的问题是带有
:key
的预处理语句不能像处理值那样处理动态SQL。我不知道答案,但您应该更改标题,也可能更改问题以反映这一点。也许?在查询中连接某些内容时要小心,可能会受到sql注入攻击。@uaiHebert这正是我在回答中提到这一点的原因。
List<Jobseekers> empList = JPA.em().createQuery("FROM Jobseekers WHERE " + 
        key + " LIKE :keyvalue")
    .setParameter("keyvalue", "%"+keyvalue+"%")
    .getResultList();