1

org.hibernate.MappingException: No Dialect mapping for JDBC type: -1データベースから行をフェッチ中にエラーが発生しました。

エラー詳細

exception

org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.hibernate.MappingException: No Dialect mapping for JDBC type: -1
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:659)
    org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:563)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
root cause

org.hibernate.MappingException: No Dialect mapping for JDBC type: -1
    org.hibernate.dialect.TypeNames.get(TypeNames.java:56)
    org.hibernate.dialect.TypeNames.get(TypeNames.java:81)
    org.hibernate.dialect.Dialect.getHibernateTypeName(Dialect.java:370)
    org.hibernate.loader.custom.CustomLoader$Metadata.getHibernateType(CustomLoader.java:559)
    org.hibernate.loader.custom.CustomLoader$ScalarResultColumnProcessor.performDiscovery(CustomLoader.java:485)
    org.hibernate.loader.custom.CustomLoader.autoDiscoverTypes(CustomLoader.java:501)
    org.hibernate.loader.Loader.getResultSet(Loader.java:1796)
    org.hibernate.loader.Loader.doQuery(Loader.java:674)
    org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:236)
    org.hibernate.loader.Loader.doList(Loader.java:2213)
    org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2104)
    org.hibernate.loader.Loader.list(Loader.java:2099)
    org.hibernate.loader.custom.CustomLoader.list(CustomLoader.java:289)
    org.hibernate.impl.SessionImpl.listCustomQuery(SessionImpl.java:1695)
    org.hibernate.impl.AbstractSessionImpl.list(AbstractSessionImpl.java:142)
    org.hibernate.impl.SQLQueryImpl.list(SQLQueryImpl.java:152)
    com.report.dao.BestSellerReportDAO.getBestSellReport(BestSellerReportDAO.java:82)
    com.report.service.BestSellerService.getBestSellReport(BestSellerService.java:21)
    com.report.service.BestSellerService$$FastClassByCGLIB$$3c172a2c.invoke(<generated>)
    net.sf.cglib.proxy.MethodProxy.invoke(MethodProxy.java:149)
    org.springframework.aop.framework.Cglib2AopProxy$CglibMethodInvocation.invokeJoinpoint(Cglib2AopProxy.java:692)
    org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150)
    org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:108)
    org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
    org.springframework.aop.framework.Cglib2AopProxy$DynamicAdvisedInterceptor.intercept(Cglib2AopProxy.java:625)
    com.report.service.BestSellerService$$EnhancerByCGLIB$$1ca7eb9d_2.getBestSellReport(<generated>)
    com.report.controller.BestSellerReportController.onSubmit(BestSellerReportController.java:55)
    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    java.lang.reflect.Method.invoke(Method.java:597)
    org.springframework.web.bind.annotation.support.HandlerMethodInvoker.doInvokeMethod(HandlerMethodInvoker.java:710)
    org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:167)
    org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:414)
    org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:402)
    org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:771)
    org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:716)
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:647)
    org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:563)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:717)

コードの使用:

query = sessionFactory.getCurrentSession().createSQLQuery("CALL my_sp_test(:gender_id,:category_id,:is_date_criteria_on,:from_date,:to_date,:unit_sold_above)");
query.setParameter("gender_id",bestSellCriteriaForms[0].getSelectedGender());       query.setParameter("category_id",bestSellCriteriaForms[0].getSelectedDepartment());
query.setParameter("unit_sold_above", 200);
query.setParameter("is_date_criteria_on", true);
query.setParameter("from_date", date);
query.setParameter("to_date", date);

//Get query as list
reportList = query.list();

このエラーについて検索していますが、まだ解決策が見つかりません。

この問題を解決するにはどうすればよいですか? (そして正直なところ、なぜそれが起こっているのか理解できませんでした)

4

3 に答える 3

2

私は自分の方言クラスを次のように書くことで答えを解決しました

import java.sql.Types;

import org.hibernate.Hibernate;
import org.hibernate.dialect.MySQLDialect;
import org.hibernate.dialect.function.StandardSQLFunction;

public class CustomeDialect extends MySQLDialect {


public CustomeDialect(){
    registerFunction("group_concat", new StandardSQLFunction("group_concat", Hibernate.STRING));
    registerFunction("coalesce", new StandardSQLFunction("coalesce", Hibernate.STRING));
    registerHibernateType(Types.LONGVARCHAR, Hibernate.TEXT.getName());

}
}

disptcher-servlet.xml に次のように追加されました。

<bean id="MySessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
    <property name="dataSource" ref="mydbDatasource"/>
     <property name="configurationClass">
            <value>org.hibernate.cfg.AnnotationConfiguration</value>
     </property>
     <property name="packagesToScan" value="com.example.entity" />
     <property name="hibernateProperties">
      <value>
        hibernate.dialect=com.example.utils.CustomeDialect
      </value>
    </property>
  </bean>

そして、それは私にとってはうまくいきます。

于 2012-07-04T11:09:48.880 に答える
1

このように hibernate.cfg.xml を作成します。

<?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="hibernate.bytecode.use_reflection_optimizer">false</property>
    <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
    <property name="hibernate.connection.password">password</property>
    <property   name="hibernate.connection.url">jdbc:mysql://localhost:3306/mkyong</property>
    <property name="hibernate.connection.username">root</property>
    <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
    <property name="show_sql">true</property>
    <mapping resource="com/mkyong/common/Stock.hbm.xml"></mapping>
</session-factory>

于 2012-06-14T08:53:14.080 に答える
1

問題は戻り値の型です。my_sp_test の戻り値の型は何ですか? JDBC ドライバーは戻り値の型を -1 と報告していますが、Hibernate はそれを解釈する方法を認識しておらず、ユーザーがそれを解釈していません。

私の推測では、 my_sp_test には戻り値の型がありませんが、選択クエリ機能を使用して使用しようとしています。Query.executeUpdate()my_sp_testに戻り値がない場合は、代わりに の呼び出しを試すことができますQuery.list()executeUpdateこれが実際に UPDATE/DELETE クエリを処理するためのものとして機能するとは断言できません。繰り返しますが、この場合、最善の策は JDBC にドロップダウンすることです。

于 2012-06-14T12:32:27.330 に答える