java - 获取 JDBC 类型的异常无方言映射

标签 java hibernate jdbc

我是 hibernate 和 java 的新手。我正在尝试执行 native 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 配置文件:

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

最佳答案

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

像这样:

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

关于java - 获取 JDBC 类型的异常无方言映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35083675/

相关文章:

java - SQL\HQL 查询存储库

java - Spring 服务器/客户端 session 和 Hibernate session

java - HQL Hibernate 不相关实体,但 id 相同

java - Spring Data JPA ManyToOne 双向

javascript - 如何使用 Java/JDBC 将动态创建的字段值插入到 MySQL 数据库中?

java - @RefreshScope 似乎忽略了 Mockito 的模拟

java - 拥有 XText 的 DSL。无限括号问题 ("(", ")")

java - JUnit - 使用 JUnitCore 运行特定测试

java - 使用java在mysql中将大量记录从一个表移动到另一个表

Java:如何从 Oracle DB 表解析 XML 类型列数据?