2012-09-06 79 views
9

tengo el HQL Siguiendo:¿Actualizar varias columnas en una consulta de Hibernate?

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

¿Es posible actualizar más de una columna en una HQL? Por ejemplo:

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

sé cómo hacer eso en MSSQL pero no sé cómo hacer eso en Hibernate.

Respuesta

22

HQL no es diferente a SQL en este caso. Sólo tiene que utilizar una coma para separar columnas:

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

¡Gracias trabajado como el encanto! – Paks

2

La sintaxis es similar a la sintaxis SQL, pero con campos/propiedades en lugar de columnas asignadas:

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

en cuenta que si el objetivo es modificar un solo instancia de la entidad, es mejor que hagas

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

¡Gracias también por su ayuda! – Paks

+0

@JB Nizet qué hacer para este caso 'actualizar empleado set empName =: empname, address =: dirección donde departamento =: departamento'. donde no actualicé basado en id. –

+0

Luego, una consulta de actualización es más eficiente. Sin embargo, puedes cargar todas las entidades que coinciden con una consulta de selección y actualizarlas en un bucle. Tenga en cuenta que una consulta de actualización directa omite la memoria caché de primer nivel. –

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

en condiciones normales, debe tener "transacción" para ejecutar la consulta

Transaction transaction = null; 
transaction = session.begintransaction(); 
... 
transaction.commit(); 
Cuestiones relacionadas