Comment puis-je exécuter une mise à jour (du nom de la requête) dans Hibernate Modèle?
J'ai un namedQuery comme ceci:
@NamedQueries ({ ...
@NamedQuery(name = "myUpdate", query = "update User set country = 'EN' where user.id = :id")
...
})
Dans dao couche
getHibernateTemplate().bulkUpdate(...?)
Mise à JOUR
Query query = sessionFactory.getCurrentSession.getNamedQuery("myUpdate");
getHibernateTemplate.bulkUpdate(query.getQueryString(), id);
J'obtiens une erreur:
Mise en veille prolongée: mise à jour de l'Utilisateur, définissez pays=FR where id = 2343 ORA-00971: manquant mot-clé SET
Quelqu'un maintenant, comment résoudre ce problème?
Mise à JOUR 2
@NamedQuery(name = "myUpdate", query =
"update User set country = 'EN' where
user.profile.id = ?")
OK
@NamedQuery(name = "myUpdate", query =
"update User set country = 'EN' where
user.profile.name = ?")
PAS OK 🙁
Vous devez vous connecter pour publier un commentaire.
Malheureusement, cette fonction est manquante dans le printemps, comme les requêtes nommées sont censés être utilisés uniquement pour récupérer des données. Une chose que vous pouvez faire est (c'est un peu un travail autour)
Je dirai que dans un certain type d'aide, de sorte que votre DAO logique de ne pas avoir à faire le tour de printemps trop.
modifier
il y a une balançant virgule entre l'Utilisateur et l'ensemble "mise à jour de l'Utilisateur , set country=FR où"
query.getQueryString()
?. Et si c'est correct, essayez la requêteupdate User set country = 'EN' where id = :id
Effectivement, c'est une très vieille question, mais j'ai eu le même problème aujourd'hui. J'ai réalisé que la mise à jour ne fonctionne pas puisque vous cannont ont une jointure à l'intérieur d'une simple mise à JOUR. C'est aussi la raison pourquoi la virgule est ajoutée. Hibernate tente de réécrire la requête comme ceci:
Pour résoudre le problème, vous devez sélectionner l'id de la deuxième table vous-même.