2017-09-19 1 views
1

J'ai une procédure comme celle-ci:exécution Oracle procédure stockée dans Hibernate Query

create or replace PROCEDURE Greeting1 IS sqlstmt varchar2(400); 
BEGIN 
    sqlstmt:= 'select * from Object_set'; 
    EXECUTE immediate sqlstmt; 
END; 

Je veux l'exécuter dans le code Java comme ceci:

List<String> result = null; 
Query query = getEm().unwrap(Session.class).createSQLQuery("CALL Greeting1()"); 
    if(query.list() != null) { 
     result = query.list(); 
    } 
return result; 

Mais il donne l'erreur lors de l'obtention requête. liste(). En fait, il renvoie null dans les objets de requête. Comment devrais-je obtenir la bonne liste de résultats? S'il vous plaît me suggérer.

Répondre

0

Je pense qu'il est impossible d'utiliser la méthode query.list(); Ce que je fais habituellement quand je dois inovke procédure stockée dans un environnement de mise en veille prolongée + printemps est quelque chose comme ceci:

//sessionFactory objext is autowired in this DAO 
Session hibSession = sessionFactory.getCurrentSession(); 
hibSession.doWork(new Work() 
{ 
    @Override 
    public void execute(Connection sqlConnection) throws SQLException 
    { 
     //Here I call the stored procedure and valorize my java POJOS if needed 
    } 
}); 

J'espère qu'il est utile

Angelo

1

Je ne connais pas vraiment la procédure stockée avec Oracle mais JPA a défini une interface pour exécuter la procédure stockée, vous devriez lire ceci: Calling Stored procedure with Hibernate.

Cela prend soin du cas où vous utilisez les paramètres IN, OUT et IN OUT, sinon pour la fonction stockée, vous devrez utiliser l'API jdbc à la place.

J'espère que cela a aidé.