[英]Hibernate execute Sql Server procedure
I have tried a lot of ways to call a simple stored procedure com hibernate and couldn´t just find a way to that. 我尝试了很多方法来将一个简单的存储过程称为“休眠”,而不仅仅是找到一种方法。
I have a procedure that return a local table variable: 我有一个返回本地表变量的过程:
SET NOCOUNT ON
declare @tableTemp Table
(
ID int,
Tipo nvarchar(50),
Regra nvarchar(50),
Quantidade int
)
select * from @tableTemp
And my query is: 我的查询是:
Query query = em.createNativeQuery("{call GetEstatisticasDeRegras}");
List result = query.getResultList();
I keep getting the error: 我不断收到错误:
javax.persistence.PersistenceException: org.hibernate.MappingException: **No Dialect mapping for JDBC type: -9**
Have alredy tried: 已经尝试过:
*call GetEstatisticasDeRegras *致电GetEstatisticasDeRegras
*exec GetEstatisticasDeRegras *执行GetEstatisticasDeRegras
*execute GetEstatisticasDeRegras *执行GetEstatisticasDeRegras
*{call GetEstatisticasDeRegras} * {致电GetEstatisticasDeRegras}
*exec dbo.GetEstatisticasDeRegras *执行dbo.GetEstatisticasDeRegras
But not way. 但是不是。 My user has all privilages over the procedure.
我的用户拥有该过程的所有特权。
EDIT 编辑
My persistence.xml: 我的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>
Any help with this? 有什么帮助吗?
This error occurs because the hibernate does not know how to mapping nvarchar
database types to java type. 发生此错误的原因是休眠状态不知道如何将
nvarchar
数据库类型映射到Java类型。 You need to define your Dialect
. 您需要定义
Dialect
。 Suppose that you use sqlserver2008, You can define Dialect like this 假设您使用sqlserver2008,则可以这样定义Dialect
public class MsSqlDialect extends SQLServer2008Dialect {
public MsSqlDialect(){
super();
registerHibernateType(Types.NVARCHAR, "string");
}
}
Then modify hibernate.dialect
to your own 然后将
hibernate.dialect
修改为您自己的
<property name="hibernate.dialect" value="xxx.xxxx.MsSqlDialect" />
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.