2013-10-26 2 views
0

Я пробовал много способов вызова простой хранимой процедуры com hibernate и не мог просто найти способ этого.Hibernate выполнить Sql Процедура сервера

У меня есть процедура, которая возвращает локальные переменные таблицы:

SET NOCOUNT ON 
declare @tableTemp Table 
(
    ID int, 
    Tipo nvarchar(50), 
    Regra nvarchar(50), 
    Quantidade int 
) 

select * from @tableTemp 

И мой запрос:

Query query = em.createNativeQuery("{call GetEstatisticasDeRegras}"); 
List result = query.getResultList(); 

я получаю ошибку:

javax.persistence.PersistenceException: org.hibernate.MappingException: **No Dialect mapping for JDBC type: -9** 

ли настройки уже пробовал :

* вызов GetEstatisticasDeRegras

* Exec GetEstatisticasDeRegras

* исполняют GetEstatisticasDeRegras

* {Вызываем GetEstatisticasDeRegras}

* Exec dbo.GetEstatisticasDeRegras

Но не путь. Мой пользователь имеет все привилегии над процедурой.


EDIT

Мой persistence.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<persistence version="2.0" 
    xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"> 

    <persistence-unit name="SIPAAM_WS_2"> 
     <provider>org.hibernate.ejb.HibernatePersistence</provider> 
     <class>Model.DadosPreProcessamento.Evento</class> 
     <class>Model.DadosPreProcessamento.Servico</class> 
     <class>Model.DadosPreProcessamento.DadosPreProcessamento</class> 
     <class>Model.Jobs.Job</class> 
     <class>Model.Jobs.JobFiltro</class> 
     <class>Model.Jobs.JobResultado</class> 
     <class>Model.Jobs.JobResultadoDados</class> 
     <class>Model.Jobs.JobResultadoPontuacao</class> 
     <class>Model.Jobs.JobEstatisticas</class> 
     <class>Model.Usuario.Usuario</class> 

     <properties> 
      <property name="hibernate.connection.url" 
       value="jdbc:sqlserver://localhost;databaseName=SIPAAM;" /> 
      <property name="hibernate.connection.username" value="x" /> 
      <property name="hibernate.connection.password" value="x" /> 
      <property name="hibernate.connection.driver_class" value="com.microsoft.sqlserver.jdbc.SQLServerDriver" /> 
      <property name="hibernate.dialect" value="org.hibernate.dialect.SQLServerDialect" /> 
      <property name="hibernate.show_sql" value="true" /> 
      <property name="hibernate.hbm2ddl.auto" value="update" /> 
     </properties> 
    </persistence-unit> 
</persistence> 

Любая помощь с этим?

+0

Вы можете добавить свой файл hibernate.cfg или ваш persistence.xml – ankit

ответ

0

Эта ошибка возникает из-за того, что спящий режим не знает, как сопоставить типы баз данных nvarchar с типом java. Вы должны определить свой Dialect. Предположим, что вы используете sqlserver2008, Вы можете определить Диалект как этот

public class MsSqlDialect extends SQLServer2008Dialect { 
    public MsSqlDialect(){ 
     super(); 
     registerHibernateType(Types.NVARCHAR, "string"); 
    } 
} 

Затем измените hibernate.dialect на свой

<property name="hibernate.dialect" value="xxx.xxxx.MsSqlDialect" /> 
Смежные вопросы