2010-09-14 7 views
9

Je vous écris ce post pour savoir si quelqu'un sait comment faire:Mise en veille prolongée - Insertion personnalisée dans la base

Je veux faire insérer:

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

crypte est une fonction stockée dans ma base de données et l'insert je voudrais le faire dans mon code. En fait, quand je veux insérer quelque chose dans la base de données que j'utilise:

getHibernateTemplate().persist(obj); 

Mais je veux faire un insert « personnalisé », parce que je dois utiliser cette fonction.

J'utilise Mise en veille prolongée + annotations:

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

Mais la clé « cdp » doit être readed d'un fichier, cette solution ne fonctionne pas pour moi.

Je veux utiliser une méthode sur mon code pour exécuter une requête SQL (requête d'insertion)

+0

Est-ce faisable en utilisant du SQL brut (en d'autres termes, mettons Hibernate de côté)? Si oui, je ne comprends pas pourquoi '@ SQLInsert' ne fonctionne pas pour vous. Sinon, j'ai bien peur qu'Hibernate n'aide pas. Pouvez-vous clarifier? –

+0

Ne fonctionne pas pour moi parce que je dois obtenir une chaîne avec la clé de cryptage, donc je ne sais pas comment l'introduire sur le @SQLInsert – Michel

Répondre

15

Voici une solution:

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

vous ne devriez pas être dans l'habbit de faire une chaîne d'ajout à vos instructions sql. Mieux vaut utiliser des paramètres nommés. –

+1

@NathanFeger votre point est assez important que j'ai édité cette réponse pour l'incorporer –

+0

Y at-il un moyen d'obtenir les clés de génération [comme dans JDBC] (http://stackoverflow.com/a/4224729/1652461)? – remi

18

Comme Nathan Feger mentionné, les paramètres nommés sont beaucoup plus propres et plus sûrs. Dans ce cas, l'instruction peut être exécutée avec le code suivant:

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

Édité la réponse de Michel pour incorporer votre code. –