Java 参数化postgresql的jpql查询中的objectname
我在PostgreSQL中使用play with JPA,在创建jpql时遇到问题 下面是我的模型代码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
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();