2009-09-15 8 views
0

Je suis un débutant en hibernation, j'utilise @ javax.persistence.NamedNativeQuery pour résoudre mes appels de proc stockés depuis hibernate vers mysql mais je reçois des erreurs.À propos d'hibernate NamedNativeQuery

S'il vous plaît aider:

Ma classe persistante est:

@Entity  
@javax.persistence.NamedNativeQuery(name = "SampleNameQuery", query = "call spS_NamedQuery(?,?)", resultClass = NamedQuery.class)  
public class NamedQuery { 

@Id 
public String name; 

@Column 
public String value; 
} 

Mon mysql stocké proc est:

DELIMITER $$ 

DROP PROCEDURE IF EXISTS `cpgDB`.`spS_NamedQuery`$$ 
CREATE DEFINER=`root`@`localhost` PROCEDURE `spS_NamedQuery`(IN name VARCHAR(255),OUT var_value VARCHAR(255)) 
BEGIN 

SET var_value = (SELECT value FROM NamedQuery WHERE NamedQuery.name = name); 
END$$ 

DELIMITER ; 

La principale méthode qui appelle ce code est que:

public static void main(String[] args) throws Exception { 
    Transaction trx = null; 
    Session session = HibernateSessionFactory.getSession(); 
    try { 
    trx = session.beginTransaction(); 

    org.hibernate.Query query = session.getNamedQuery("SampleNameQuery"); 
    query.setParameter(0,"fsdfsdf");  
    String value = ""; 
    query.setParameter(1,value);  
    List objList = query.list();  
    trx.commit(); 
    } catch (Exception ex) { 
    trx.rollback(); 
    throw ex; 
    } finally { 
    HibernateSessionFactory.closeSession(); 
    }  
} 

Mon fichier de configuration de mise en veille prolongée est aussi:

<?xml version='1.0' encoding='UTF-8'?> 
<!DOCTYPE hibernate-configuration PUBLIC 
      "-//Hibernate/Hibernate Configuration DTD 3.0//EN" 
      "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> 

<hibernate-configuration> 
<session-factory> 
    <property name="connection.username">xxxx</property> 
    <property name="connection.url">jdbc:mysql://127.0.0.1:3306/cpgDB</property> 
    <property name="dialect">org.hibernate.dialect.MySQLDialect</property> 
    <property name="myeclipse.connection.profile">MySQL</property> 
    <property name="connection.password">xxxxx</property> 
    <property name="connection.driver_class">com.mysql.jdbc.Driver</property> 
    <property name="hbm2ddl.auto">update</property> 
    <property name="show_sql">true</property> 
    <property name="format_sql">true</property> 
    <mapping class="Demo.NamedQuery"/> 
</session-factory> 
</hibernate-configuration> 

sur l'exécution du code, je reçois l'erreur suivante/exception:

Sep 15, 2009 8:54:16 PM org.hibernate.util.JDBCExceptionReporter logExceptions 
SEVERE: OUT or INOUT argument 2 for routine cpgDB.spS_NamedQuery is not a variable or NEW pseudo-variable in BEFORE trigger 
Exception in thread "main" org.hibernate.exception.SQLGrammarException: could not execute query 
at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:67) 
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43) 
at org.hibernate.loader.Loader.doList(Loader.java:2214) 
at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2095) 
at org.hibernate.loader.Loader.list(Loader.java:2090) 
at org.hibernate.loader.custom.CustomLoader.list(CustomLoader.java:289) 
at org.hibernate.impl.SessionImpl.listCustomQuery(SessionImpl.java:1695) 
at org.hibernate.impl.AbstractSessionImpl.list(AbstractSessionImpl.java:142) 
at org.hibernate.impl.SQLQueryImpl.list(SQLQueryImpl.java:152) 
at Demo.TestDrive.main(TestDrive.java:44) 
Caused by: com.mysql.jdbc.exceptions.MySQLSyntaxErrorException: OUT or INOUT argument 2 for routine cpgDB.spS_NamedQuery is not a variable or NEW pseudo-variable in BEFORE trigger 
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:930) 
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2864) 
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1567) 
at com.mysql.jdbc.ServerPreparedStatement.serverExecute(ServerPreparedStatement.java:1154) 
at com.mysql.jdbc.ServerPreparedStatement.executeInternal(ServerPreparedStatement.java:679) 
at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:1256) 
at org.hibernate.jdbc.AbstractBatcher.getResultSet(AbstractBatcher.java:186) 
at org.hibernate.loader.Loader.getResultSet(Loader.java:1778) 
at org.hibernate.loader.Loader.doQuery(Loader.java:662) 
at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:224) 
at org.hibernate.loader.Loader.doList(Loader.java:2211) 
... 7 more 

S'il vous plaît aider ce qui va mal et me aider à faire corriger. Aussi me référer à des liens appropriés où je peux en apprendre plus sur cette technique.

Merci à l'avance

Ashish

Répondre

0

Je ne pouvais pas trouver réponse à cette question, la solution i mis en œuvre était alors de ne pas utiliser le champ « out » dans ma procédure stockée et renvoie le résultat de sql interroger via la commande select uniquement.

Éventuellement Hibernate n'a pas implémenté complètement cette fonctionnalité de renvoi des paramètres 'Out'.