我想将参数绑定应用于动态本机查询,其中我提取的列名称将从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语法异常。请有人帮我这个。提前谢谢!
答案 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