2012-09-06 18 views
9

Mam następujący HQL:Zaktualizuj kilka kolumn w jednym zapytaniu o hibernację?

String hql = "UPDATE Buchung as b " + 
      "set STORNO = :Storno " + 
      "where ID = :BuchungID"; 

Czy jest możliwe aby zaktualizować więcej niż jednej kolumny w HQL? Na przykład:

String hql = "UPDATE Buchung as b " + 
       "set STORNO = :Storno " + 
       "set NAME = :Name " + 
       ...... 
       "where ID = :BuchungID"; 

Wiem, jak to zrobić w MSSQL, ale nie wiem jak to zrobić w Hibernate.

Odpowiedz

22

HQL nie różni się od SQL w tym przypadku. Wystarczy użyć przecinka do oddzielnych kolumnach:

String hql = "UPDATE Buchung as b set " + 
      "STORNO = :Storno," + 
      "NAME = :Name " + 
      ...... 
      "where ID = :BuchungID"; 
+0

Dzięki temu dzieło zadziałało jak urok! – Paks

2

Składnia jest podobna do składni SQL, ale z odwzorowanych pól/właściwości zamiast kolumn:

update Buchung set storNo = :storno, name = :name where id = :buchungID 

pamiętać, że jeśli celem jest zmiana pojedyncza instancja podmiot, lepiej zrobić

Buchung b = (Buchung) session.get(Buchung.class, buchungId); 
b.setStorNo(newStorno); 
b.setName(newName); 
+0

Dziękuję również za pomoc! – Paks

+0

@JB Nizet co zrobić w tym przypadku 'update employee set empName =: empname, address =: address gdzie dept =: dept'. gdzie nie aktualizowałem na podstawie identyfikatora. –

+0

Następnie kwerenda aktualizacji jest bardziej wydajna. Możesz przesłać obciążenie wszystkich pasujących elementów przy użyciu kwerendy wyboru i zaktualizować je w pętli. Należy pamiętać, że zapytanie o aktualizację bezpośrednią pomija pamięć podręczną pierwszego poziomu. –

1
String hql = "UPDATE Buchung as b set " + 
      "STORNO = :Storno," + 
      "NAME = :Name " + 
      ...... 
      "where ID = :BuchungID"; 

Query qr = session.createSQLQuery(hql); 

qr.setParameter("Storno","sto_value"); 

qr.setParameter("Name","name_value"); 

... 

qr.executeUpdate(); 

w normalnym, trzeba mieć „transakcja”, aby uruchomić kwerendę

Transaction transaction = null; 
transaction = session.begintransaction(); 
... 
transaction.commit(); 
Powiązane problemy