【问题标题】:Getting Exception No Dialect mapping for JDBC type获取 JDBC 类型的异常无方言映射
【发布时间】:2016-01-29 11:41:33
【问题描述】:

我是 hibernate 和 java 的新手。我正在尝试执行本机 sql 查询,但我被卡住了。任何人都可以帮助我或检查我在哪里做错了吗?

我的java代码是:

try {
            trns = session.beginTransaction();
            String sql = "select principle,interest from salaryinfo where empid = " + selectedempid + "";
            SQLQuery query = session.createSQLQuery(sql);
            List<Object[]> rows = query.list();
            for (Object[] row : rows) {
                Salaryinfo si= new Salaryinfo();
                si.setPrinciple(Float.parseFloat(row[0].toString()));
                si.setInterest(Float.parseFloat(row[1].toString()));
                sis.add(si);
            }

错误追踪:

Severe:   org.hibernate.MappingException: No Dialect mapping for JDBC type: 7
    at org.hibernate.dialect.TypeNames.get(TypeNames.java:56)
    at org.hibernate.dialect.TypeNames.get(TypeNames.java:81)
    at org.hibernate.dialect.Dialect.getHibernateTypeName(Dialect.java:192)
    at org.hibernate.loader.custom.CustomLoader.getHibernateType(CustomLoader.java:161)
    at org.hibernate.loader.custom.CustomLoader.autoDiscoverTypes(CustomLoader.java:131)
    at org.hibernate.loader.Loader.getResultSet(Loader.java:1678)
    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:2145)
    at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2029)
    at org.hibernate.loader.Loader.list(Loader.java:2024)
    .
    .
    .
    .

我确实调试了我的程序,发现我的程序在这一行出现故障SQLQuery query = session.createSQLQuery(sql);

休眠配置文件:

<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">****</property>
        <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/empdata</property>
        <property name="hibernate.connection.username">****</property>
        <property name="hibernate.dialect">org.hibernate.dialect.MySQLInnoDBDialect</property>

        <property name="hibernate.show_sql">false</property>
    <property name="hibernate.format_sql">false</property>
    <property name="hibernate.cache.use_query_cache">true</property>
    <property name="hibernate.c3p0.acquire_increment">1</property> 
    <property name="hibernate.c3p0.idle_test_period">10</property> <!-- seconds -->             
        <mapping resource="hibernate/Salaryinfo.hbm.xml" />   

    </session-factory>
</hibernate-configuration>

【问题讨论】:

  • 您使用的是哪个数据库和 Hibernate 方言?请注意,7 类型为 java.sql.Types.REAL
  • 你没有设置 addScaler Type....试试 SQLQuery query = session.createSQLQuery(sql).addScalar("principle", new FloatType()).addScalar("interest", new FloatType ());
  • 显示你的休眠配置
  • @PiyushGupta 我试过这个......现在它对我有用,感谢您节省我的时间。

标签: java hibernate jdbc


【解决方案1】:

您需要将addScalar(); 放入您的本机sqlquery 语法中。为了避免使用 ResultSetMetadata 的开销,或者只是为了更明确地返回返回的内容,可以使用addScalar()。

像这样:

SQLQuery query = session.createSQLQuery(sql)
  .addScalar("principle", new FloatType())
  .addScalar("interest", new FloatType());

【讨论】:

    【解决方案2】:

    您的数据库使用REAL 数据类型,但您的方言不理解它,因此无法将其映射到Java 类型之一。见Types.java。

    【讨论】:

      猜你喜欢
      • 2012-10-10
      • 2021-06-29
      • 2017-12-16
      • 2018-08-30
      • 1970-01-01
      • 2014-08-08
      • 2015-03-27
      相关资源
      最近更新 更多