2012-10-05 25 views
12

Czytałem samouczek Hibernacja HQL i stwierdziłem, że HQL nie obsługuje INSERT INTO..VALUES.., ale INSERT INTO..SELECT.., tj. Tylko HQL obsługuje wstawienie z innej tabeli.Wstawianie danych w jednej tabeli przy użyciu HQL w Hibernate

Załóżmy, że chcę wstawić te same wartości w jednej tabeli i że dane nie pochodzą z żadnej innej tabeli, tj. Wartości nie znajdują się w żadnej innej tabeli. Następnie, jak mogę to zrobić w HQL?

Czy chciałbyś również poznać racjonalne uzasadnienie takich ograniczeń w HQL?

+0

Nie rozumiesz, kto poniósł to pytanie? Ktokolwiek to zrobił, proszę daj mi znać powód, dla którego mogę zająć się w przyszłości – Anand

+0

Nie jestem downvoter, ale myślę, że powinieneś przeczytać to: http://stackoverflow.com/faq#dontask – user1516873

Odpowiedz

7

Nie trzeba używać hql do wstawienia, jeśli dane pochodzą z innej tabeli.

Po prostu uzyskaj odwołanie do swojego obiektu, zatrzymaj sesję hibernacji i wywołaj save().

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

Pseudo-składni INSERT

INSERT INTO EntityName properties_list select_statement

Tylko INSERT INTO ... SELECT ... forma jest utrzymany. Nie można podać jawnych wartości do wstawienia.

+2

Pytam, jak mogę wstawić dane w tabeli w HQL. Uwaga: Dane do wstawienia nie pochodzą z innej tabeli. – Anand

+0

Dodałem dokumentację hibernacji do wstawienia. – swemon

+0

dzięki za wyjaśnienie – Anand

3

Hibernacja jest strukturą ORM (mapowanie obiektowo-relacyjne).

Jego zadaniem jest dostarczanie obiektów (encji) i zarządza przechowywaniem (poprzez Session.save(), IIRC).

Nie używasz HQL do wstawiania nowych rekordów, ale użyj metod ORM.

Z drugiej strony, ponieważ ładowanie elementów z tabeli, kopiowanie ich do innych jednostek i przechowywanie ich pojedynczo jest powolne, HQL zapewnia skrót do SQL w DB tylko dla tego specyficzna operacja dla celów wydajności.

+0

Wiem, używając sesji. save() mogę zrobić to samo, ale chcę tylko wiedzieć, jak mogę wstawić dane (nie z jakiejkolwiek innej tabeli) do tabeli za pomocą HQL. – Anand

+1

Dostawca frameworka mówi, że nie możesz tego zrobić. Znasz alternatywę i podano jej uzasadnienie. A jednak mówisz, że chcesz to zrobić w ten sposób ... przynajmniej mamy szczęście, że jesteś programistą, a nie pilotem samolotu. Jeśli chcesz po prostu użyć SQL, użyj SQL, a nie Hibernate. – SJuan76

+0

Nigdy nie powiedziałem, że chcę to zrobić, po prostu pytam, czy możemy to zrobić, czy nie ... mam nadzieję, że zrozumiecie różnicę .. – Anand

1

Możesz użyć session.save(object), aby wstawić dane do tabel.

Powiązane problemy