2015-05-21 1 views
1

Я работаю над исправлением некоторых выводов кода, обнаруженных HP Fortify.Использование createNativeQuery с заявлениями GRANT

Попытка исправить существующий оператор запроса, который выполняет ГРАНТ ЗАЯВЛЕНИЯ

Оригинального код:

Query grantQuery = entityManager.createNativeQuery("GRANT INSERT ON TABLE " + data + " TO " + username); 
grantQuery.executeUpdate(); 

переменные данные просто строка, переданная в этом классе сохранения файл. Имя переменной является частной статической конечной строкой файла класса persistence. Также известно, что этот файл свойств имени пользователя вытащен из локального файла конфигурации.

Fortify рекомендует использовать подготовленные операторы вместо конкатенации строк.

Я играл с выполнением setParameters на grantQuery, но я просто получаю ошибки во время выполнения.

Модифицированный код для использования SetParameters:

Query grantQuery = entityManager.createNativeQuery("GRANT INSERT ON TABLE ?1 TO $2"); 
grantQuery.setParameter(1, data); 
grantQuery.setParameter(2, username); 
grantQuery.executeUpdate(); 

Ошибка: Откат транзакции после исключения. java.lang.IllegalArgumentException: org.hibernate.QueryParameterException: не удалось найти именованный параметр [2]

Является ли мой синтаксис неправильным использовать setParameters неправильно? Должен ли я использовать другой метод для выполнения инструкции GRANT?

ответ

1

Вы кладете "$" в качестве префикса для второго параметра, когда необходимо иметь "?"

+0

Спасибо за поймать эту ошибку. Ошибка, полученная ранее, когда используется другой синтаксис setParameter переменной – Boosted2003

+0

WARN [org.hibernate.util.JDBCExceptionReporter] (RMI TCP Connection (19) -127.0.0.1) Ошибка SQL: 0, SQLState: 42601 ОШИБКА [ org.hibernate.util.JDBCExceptionReporter] (RMI TCP Connection (19) -127.0.0.1) ОШИБКА: синтаксическая ошибка в точке или рядом с "$ 1" Позиция: 23 ERROR [src.repo.Persistence] (RMI TCP Connection (19)) -127.0.0.1) Откат транзакции после exception.javax.persistence.PersistenceException: org.hibernate.exception.SQLGrammarException: не удалось выполнить запрос на массовое манипулирование – Boosted2003

+0

Это, по-видимому, не тот же вопрос, и если вам это нужно, по крайней мере, в вашем вопросе, что SQL пытается выполнить и что это «$ 1» –