entityManager JPA 的 createNativeQuery 的 setParameter 问题
setParameter issue with createNativeQuery of entityManager JPA
我想将参数绑定应用于动态本机查询,其中我正在获取的列名将从 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 语法异常。有人可以帮我解决这个问题吗?提前致谢!
正如我在评论中告诉您的那样,setParameter
的全部意义在于绑定参数值并防止 SQL 注入。你不能用它来传递垃圾,因为它们会被引号包围。
要动态构建查询,您可以这样做:
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
我想将参数绑定应用于动态本机查询,其中我正在获取的列名将从 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 语法异常。有人可以帮我解决这个问题吗?提前致谢!
正如我在评论中告诉您的那样,setParameter
的全部意义在于绑定参数值并防止 SQL 注入。你不能用它来传递垃圾,因为它们会被引号包围。
要动态构建查询,您可以这样做:
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