2010-05-24 7 views
0

J'utilise Hibernate dans mon projet et il y a un certain scénario où je veux utiliser la méthode uniqueResult() sur le org.hibernate.SQLQuery classe pour exécuter natif SQL INSERT et MISE À JOUR opérations.En utilisant SQLQuery.uniqueResult() pour effectuer INSERTs SQL natif et UPDATEs

J'ai essayé d'utiliser la méthode executeUpdate() sur la même classe. Mais je reçois une erreur disant qu'ils sont utilisés pour les mises à jour HQL seulement.

Veuillez indiquer s'il s'agit d'un moyen efficace et fiable d'assurer la sauvegarde/mise à jour des données dans la base de données.

Répondre

0

session.createSQLQuery() est pour l'interrogation, pas de manipulation. Si vous voulez faire une insertion SQL brute, utilisez session.connection() et du code JDBC direct.

Je ne sais pas pourquoi vous avez besoin de cela exactement, mais je suggère également de vérifier 16.3. Custom SQL for create, update and delete.

+0

Merci Pascal. Mais, session.connection() fonctionnerait-elle dans les limites de transaction de la session Hibernate actuelle? En fait, je veux exécuter le SQL natif pour certaines insertions et mises à jour et j'ai besoin de le faire avec du SQL brut pour des raisons de performances. En plus, je travaille avec une base de données dont le schéma n'est pas conçu/optimisé sur les entités et j'ai donc du mal à faire fonctionner Hibernate avec. Je fais des insertions en utilisant uniqueResults(), cela fonctionne pour la plupart des endroits mais ne parvient pas à insérer des données dans certains cas. Par conséquent, je voulais le faire à la manière de la vieille école JDBC. – oddjobsman

+0

@RanganathKini: 'session.connection()' renvoie la connexion JDBC sous-jacente donc, oui, cela fonctionnera dans les limites de la transaction en cours. –

Questions connexes