2010-09-14 2 views
9

Я пишу этот пост, чтобы знать, если кто-то знает, как это сделать:Hibernate - Пользовательские вставки в базу данных

Я хочу сделать эту вставку:

INSERT INTO TABLA (CAMPO1, CAMPO2) VALUES (?, crypt(?,'cdp')) 

Crypt функция хранится в моей базе данных и вставка, которую я хотел бы сделать в своем коде. На самом деле, когда я хочу, чтобы вставить что-то в базе данных я использую:

getHibernateTemplate().persist(obj); 

Но я хочу сделать «на заказ» вставку, потому что мне нужно использовать эту функцию.

Я использую спящий режим + аннотации:

@org.hibernate.annotations.SQLInsert (sql = "INSERT INTO TABLA (CAMPO1, CAMPO2) VALUES (?, crypt(?,'cdp'))") 

Но ключ «КДП» должны быть прочтенным из файла, так что это решение не работает для меня.

Я хочу использовать метод на мой код для выполнения SQL запроса (INSERT запрос)

+0

Возможно ли это, используя необработанный SQL (другими словами, давайте отложим Hibernate в сторону)? Если да, я не понимаю, почему '@ SQLInsert' не работает для вас. Если нет, я боюсь, что Hibernate не поможет. Вы можете уточнить? –

+0

Не работает для меня, потому что мне нужно получить String с ключом cryment, поэтому я не знаю, как его представить на @SQLInsert – Michel

ответ

15

Вот решение:

Query query = getSession().createSQLQuery("INSERT INTO TABLA (CAMPO1, CAMPO2) VALUES (:valor1, encripta(:valor2, :key))"); 
query.setParameter("valor1", valor1); 
query.setParameter("valor2", valor2); 
query.setParameter("key", key); 
query.executeUpdate(); 
+7

, вы не должны быть в привычной последовательности, добавляющей строки к вашим операторам sql. Лучше использовать именованные параметры. –

+1

@NathanFeger Ваша точка важна, что я отредактировал этот ответ, чтобы включить его. –

+0

Есть ли способ получить ключи генерации [как в JDBC] (http://stackoverflow.com/a/4224729/1652461)? – remi

18

Как Nathan Feger упоминалось, названные параметры являются намного чище и безопаснее. В этом случае оператор может быть выполнен с помощью следующего кода:

Query query = getSession().createSQLQuery("INSERT INTO TABLA (CAMPO1, CAMPO2) VALUES (:valor1, encripta(:valor2, :key))"); 
query.setParameter("valor1", valor1); 
query.setParameter("valor2", valor2); 
query.setParameter("key", key); 
query.executeUpdate(); 
+0

Отредактированный ответ Мишеля, чтобы включить ваш код. –

Смежные вопросы