Hibernate Books

All times are UTC - 5 hours [ DST ]



Post new topic Reply to topic  [ 2 posts ] 
Author Message
 Post subject: Postgres function
PostPosted: Thu Aug 13, 2015 12:53 pm 
Newbie

Joined: Thu Aug 13, 2015 12:28 pm
Posts: 1
Bonsoir,
Je me casse la tête sur un bout de code depuis le lundi. Maintenant j'appel à l'aide. Je n'arrive pas à exécuter une procédure stockée de postgres depuis hibernate.
Voici mon code java:
Code:
                        StoredProcedureQuery storedProcedure = em.createStoredProcedureQuery("p_count_contrat");
             storedProcedure.registerStoredProcedureParameter(1,Integer.class, ParameterMode.IN);
             storedProcedure.setParameter(1, 37);          
             storedProcedure.executeUpdate();


Voici le code de ma procédure stockée:
Code:
CREATE OR REPLACE FUNCTION "public"."p_count_contrat"(vidbanque INTEGER)
  RETURNS INTEGER AS
      $$
   DECLARE
      rowsAffected integer := 0;
      BEGIN
      BEGIN
         UPDATE banque SET libbanque='ORA ORA ORABANK' WHERE idbanque=vidbanque;
      
       RETURN null;
          END;

         GET DIAGNOSTICS rowsAffected = ROW_COUNT; --here you get the affected rows
         return rowsAffected;
    END;
    $$
  LANGUAGE 'plpgsql' VOLATILE COST 100
SECURITY DEFINER;
ALTER FUNCTION "public"."p_count_contrat"(vidbanque INTEGER) OWNER TO "postgres";


et voici la requête exécutée sur postgres par hibernate récupérée du log:
Code:
{call p_count_contrat(?)}

et voici enfin le résultat que j'ai:
Code:
Building Return [isResultSet=true, updateCount=-1, extendedReturn=false


En plus j'ai remarqué que aucune requête d'écriture ne marche à partir de hibernate en nativequery(Appel de procédure stockée ou exécution directe de requête). Par contre, j'ai toujours le nombre de ligne impacté par requête en résultat, sans que l'impact n'ait eu lieu dans la base.
Je comprends plus rien.

Merci de m'aider.


Top
 Profile  
 
 Post subject: Re: Postgres function
PostPosted: Tue Dec 15, 2015 2:26 am 
Hibernate Team
Hibernate Team

Joined: Thu Sep 11, 2014 2:50 am
Posts: 1518
Quand on appelle `executeUpdate()`, Hibernate retourne le nombre de lignes affecte par cette fonctionne.

Code:
storedProcedure.executeUpdate();


Tu doit le changer comme çà:

Code:
Object result = storedProcedure.getSingleResult();

_________________
If you liked my answer, you are going to love my High-Performance Java Persistence book and my blog as well.


Top
 Profile  
 
Display posts from previous:  Sort by  
Post new topic Reply to topic  [ 2 posts ] 

All times are UTC - 5 hours [ DST ]


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum

Search for:
© Copyright 2014, Red Hat Inc. All rights reserved. JBoss and Hibernate are registered trademarks and servicemarks of Red Hat, Inc.