2009-09-15 48 views
0

我是hibernate的新手,我使用@ javax.persistence.NamedNativeQuery來解決從休眠到mysql的存儲過程調用,但我得到錯誤。關於hibernate NamedNativeQuery

請幫助:

我的持久化類是:

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

@Id 
public String name; 

@Column 
public String value; 
} 

我的MySQL存儲過程是:

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 ; 

正在調用該代碼的主要方法是:

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(); 
    }  
} 

我的休眠配置文件是:

<?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> 

在代碼執行我收到以下錯誤/異常:

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 

請幫什麼錯誤,並幫我把它糾正。另請參閱適當的鏈接,我可以瞭解有關此技術的更多信息。

在此先感謝

阿希什

回答

0

我無法找到這個問題的答案,我實現,那麼是不是用「出」場在我的存儲過程,並返回SQL結果的解決方案僅通過select命令查詢。

可能Hibernate還沒有完全實現這個返回'Out'參數的功能。