Ошибка setParameter с createNativeQuery для entityManager JPA - PullRequest
0 голосов
/ 02 мая 2018

Я хочу применить привязку параметра к динамическому собственному запросу, где имя столбца, который я получаю, будет динамически передаваться из пользовательского интерфейса (например, 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 голосов
/ 02 мая 2018

Как я уже говорил в своем комментарии, весь смысл 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...