2010-09-14 9 views
9

Scrivo questo post per sapere se qualcuno sa come farlo:Hibernate - inserire su misura in base di dati

che voglio fare questo inserto:

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

Cripta è una funzione memorizzata nel mio database e l'inserto vorrei farlo nel mio codice. In realtà quando voglio inserire qualcosa nel database che uso:

getHibernateTemplate().persist(obj); 

Ma io voglio fare un inserto "custom", perché ho bisogno di utilizzare tale funzione.

Sto usando Hibernate + annotazioni: il tasto 'CDP' deve essere 'letti da un file

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

Ma, per cui questa soluzione non funziona per me.

voglio usare un metodo su mio codice per eseguire una query SQL (query INSERT)

+0

È eseguibile utilizzando SQL raw (in altre parole, mettiamo da parte Hibernate)? Se sì, non capisco perché '@ SQLInsert' non funzioni per te. Altrimenti temo che Hibernate non aiuti. Puoi chiarire? –

+0

Non funziona per me perché ho bisogno di ottenere una stringa con la chiave di crittografia, quindi non so come introdurla su @SQLInsert – Michel

risposta

15

Ecco una soluzione:

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

, non dovresti essere in grado di eseguire accodamenti di stringa alle istruzioni sql. Meglio usare i parametri nominati. –

+1

@NathanFeger il tuo punto è abbastanza importante che ho modificato questa risposta per incorporarlo –

+0

C'è un modo per ottenere le chiavi di generazione [come in JDBC] (http://stackoverflow.com/a/4224729/1652461)? – remi

18

come Nathan Feger accennato, i parametri denominati sono molto più pulito e più sicuro. In questo caso, la dichiarazione può essere eseguita con il seguente codice:

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

Modificato la risposta di Michel per incorporare il tuo codice. –

Problemi correlati