setParameter问题与entityManager JPA的createNativeQuery有关

时间:2018-05-02 08:36:56

标签: java jpa hibernate-entitymanager

我想将参数绑定应用于动态本机查询,其中我提取的列名称将从UI动态传递。(例如,在这种情况下为emp_id)。

以下是示例java代码段

org.hibernate.Query queryMain;
String fetchColumn="emp_id";
String query;
query="select e.:id from Employee e";
queryMain = (org.hibernate.Query) em.createNativeQuery(query).unwrap(org.hibernate.Query.class);
queryMain.setParameter("id", fetchColumn);

但是当我执行此代码时,我得到sql语法错误异常。当我打印sql查询时,我得到如下

select 'emp_id' from Employee

由于列是在字符串文字中设置的,因此抛出了sql语法异常。请有人帮我这个。提前谢谢!

1 个答案:

答案 0 :(得分:0)

正如我在评论中告诉你的那样,setParameter的重点是绑定参数值并阻止SQL注入。你不能用它传递litterals,因为它们会被引号括起来。 要动态构建查询,您可以执行以下操作:

StringBuilder sb = new StringBuilder();
String fetchColumn = "emp_id"; //take care of SQL injection if necessary
String tableName = Employee.class.getSimpleClassName();
sb.append("select ").append(fetchColumn)
    .append("from ").append(tableName);
String query = sb.toString();
// rest of your code here