О спящем режиме NamedNativeQuery - PullRequest
0 голосов
/ 15 сентября 2009

Я новичок в hibernate, я использую @ javax.persistence.NamedNativeQuery, чтобы разрешить мои вызовы от Hibernate до mysql, но я получаю ошибки.

Пожалуйста, помогите:

Мой постоянный класс:

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

Мой файл конфигурации hibernate выглядит так:

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

Пожалуйста, помогите, что идет не так, и помогите мне исправить это. Также направьте меня к подходящим ссылкам, где я могу узнать больше об этой технике.

Заранее спасибо

Ashish

1 Ответ

0 голосов
/ 02 ноября 2009

Мне не удалось найти ответ на этот вопрос, поэтому решение, которое я реализовал, состояло в том, чтобы не использовать поле 'out' в моей хранимой процедуре и возвращать результат запроса sql только с помощью команды select.

Возможно, Hibernate не полностью реализовал эту функцию возврата параметров Out.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...