String SQL_QUERY ="Select items.iname,items.iid,items.iprice from Item items where items.iid = '"+selecteditem+"'";
подвержен sql-инъекции, если selectedItem
- данные, введенные пользователем.
Генерация SQL или HQL-запросов путем объединения строк, как правило, является плохой формой и может привести к возможности внедрения SQL.
Безопасный способ - использовать именованные параметры в любом SQL или HQL.
В вашем примере, который выглядит как SQL, после получения сеанса Hibernate, что-то вроде:
String SQL_QUERY ="Select items.iname,items.iid,items.iprice from Item items where items.iid = :selecteditem";
SQLQuery query = session.createSQLQuery(SQL_QUERY);
query.setParameter("selecteditem", selecteditem);
List<Object[]> results = query.list();
должно быть примерно так, как вы хотите кодировать и выполнять ваш запрос.
Аналогичные вещи применимы к HQL.
Если вы просто объединяете строки, злые значения, введенные хакером, как в знаменитом xkcd , становятся частью вашего запроса и могут делать ужасные вещи.
Если это не веб-форма, а настольное приложение, вполне возможно, что вы полностью контролируете значения, которые могут попасть в эту переменную, но все же рекомендуется попытаться сделать это правильно.
Другим эффектом именованных параметров является то, что параметризованный sql может быть кэширован и повторно использован для различных значений параметра. Так что это хорошая идея даже без заботы о безопасности.