2012-09-06 31 views
9

tôi có HQL sau:Cập nhật một số Cột trong một Truy vấn Hibernate?

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

Có thể để cập nhật nhiều hơn sau đó một cột trong một HQL? Ví dụ:

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

Tôi biết cách thực hiện điều đó trong MSSQL nhưng tôi không biết cách thực hiện điều đó trong Hibernate.

Trả lời

22

HQL không khác với SQL trong trường hợp này. Chỉ cần sử dụng dấu phẩy để cột riêng biệt:

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

Cảm ơn bạn đã làm việc như sự quyến rũ! – Paks

2

Cú pháp tương tự như cú pháp SQL, nhưng với lĩnh vực lập bản đồ/tài sản thay vì cột:

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

Lưu ý rằng nếu mục tiêu là để sửa đổi một đơn thực thể Ví dụ, bạn muốn tốt hơn làm

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

Cảm ơn sự giúp đỡ của bạn! – Paks

+0

@JB Nizet phải làm gì cho trường hợp này 'nhân viên cập nhật đặt empName =: empname, address =: address nơi dept =: dept'. nơi tôi không cập nhật dựa trên id. –

+0

Sau đó, truy vấn cập nhật sẽ hiệu quả hơn. Bạn có thể sill tải tất cả các thực thể phù hợp bằng cách sử dụng một truy vấn chọn, và cập nhật chúng trong một vòng lặp, mặc dù. Cẩn thận rằng truy vấn cập nhật trực tiếp sẽ bỏ qua bộ nhớ cache cấp một. –

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(); 

trong bình thường, bạn phải có "giao dịch" để chạy truy vấn

Transaction transaction = null; 
transaction = session.begintransaction(); 
... 
transaction.commit(); 
Các vấn đề liên quan