2012-10-05 20 views
12

Stavo leggendo il tutorial Hibernate HQL e ho scoperto che HQL non supporta INSERT INTO..VALUES.. ma INSERT INTO..SELECT.. e cioè l'inserto di supporto solo HQL da un'altra tabella.Inserimento di dati in una tabella utilizzando HQL in Hibernate

Supponiamo di voler inserire gli stessi valori in una tabella e che i dati non provengano da alcuna altra tabella, cioè i valori non sono in alcuna altra tabella. Quindi come posso farlo in HQL?

Inoltre, vorrebbe conoscere il razionale dietro tali restrizioni in HQL?

+0

Non capisco chi ha svalutato questa domanda? Chiunque abbia fatto, per favore fammi sapere il motivo in modo che possa fare attenzione in futuro – Anand

+0

non sono downferer, ma penso che dovresti leggere questo: http://stackoverflow.com/faq#dontask – user1516873

risposta

7

Non è necessario utilizzare hql per inserire se i dati provengono da un'altra tabella.

È sufficiente ottenere un riferimento alla propria entità, ottenere una sospensione di una sessione di sospensione e chiamare save().

Secondo http://docs.jboss.org/hibernate/orm/4.0/devguide/en-US/html/ch04.html#d0e2116

Pseudo-sintassi per le istruzioni INSERT

INSERT INTO EntityName properties_list select_statement

Solo l'INSERT INTO ... SELECT ... forma è supportato. Non è possibile specificare valori espliciti da inserire.

+2

Mi chiedo come posso inserire un dato in una tabella in HQL. Nota: i dati da inserire non provengono da un'altra tabella. – Anand

+0

Ho aggiunto la documentazione di ibernazione per l'inserimento. – swemon

+0

grazie per averlo chiarito – Anand

3

Hibernate è un framework ORM (Object-Relational Mapping).

Il suo compito è di fornire oggetti (entità) e di gestire l'archiviazione (tramite Session.save(), IIRC).

Quindi, non si utilizza l'HQL per inserire nuovi record, ma utilizzare i metodi ORM.

E (questa è una supposizione) d'altra parte, dal momento che caricare entità da una tabella, copiarle su altre entità e archiviarle una alla volta è lenta, HQL fornisce un collegamento all'SQL nel DB solo per quello operazione specifica a fini di prestazione.

+0

So usare la sessione. save() posso fare lo stesso, ma voglio solo sapere come posso inserire i dati (non da qualsiasi altra tabella) in una tabella usando HQL. – Anand

+1

Il fornitore del framework dice che non puoi farlo. Conosci un'alternativa e ti viene data una spiegazione logica. Eppure dici solo che vuoi farlo in questo modo ... almeno, siamo fortunati che tu sia un programmatore e non un pilota di aerei. Se vuoi semplicemente usare SQL, usa SQL e non Hibernate. – SJuan76

+0

Non ho mai detto che voglio fare in quel modo, sto solo chiedendo se possiamo farlo o no .. spero che tu capisca la differenza .. – Anand

1

È possibile utilizzare session.save(object) per inserire dati nelle tabelle.

Problemi correlati