web-dev-qa-db-fra.com

Mettre à jour plusieurs colonnes dans une requête Hibernate?

j'ai le HQL suivant:

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

Est-il possible de mettre à jour plus d'une colonne dans un HQL? Par exemple:

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

Je sais comment faire cela dans MSSQL mais je ne sais pas comment faire cela dans Hibernate.

13
Paks

HQL n'est pas différent de SQL dans ce cas. Utilisez simplement une virgule pour séparer les colonnes:

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

La syntaxe est similaire à la syntaxe SQL, mais avec des champs/propriétés mappés au lieu de colonnes:

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

Notez que si l'objectif est de modifier une instance d'entité unique, vous feriez mieux de faire

Buchung b = (Buchung) session.get(Buchung.class, buchungId);
b.setStorNo(newStorno);
b.setName(newName);
2
JB Nizet
    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();

normalement, vous devez avoir "transaction" pour lancer la requête 

    Transaction transaction = null;
transaction = session.begintransaction();
...
transaction.commit();
1
dungth4