mysql57innodbdialect_hibernate:MySQL No Dialect mapping for JDBC type: -1

出处:(hibernate中使用原生的sql语句,报如下错误:)

MySQL No Dialect mapping for JDBC type: -1

代码:

List list = session.createSQLQuery(sql).list();

分析:产生些问题的原因是因表中的某个字段类型在hibernate中找不到对应的类型。而导致的,每一种类型都对应一种type:

类型名称

显示长度

数据库类型

JAVA类型

JDBC类型(int)

Types属性

VARCHAR

L+N

VARCHAR

java.lang.String

12

Types.VARCHAR

CHAR

N

CHAR

java.lang.String

1

Types.CHAR

BLOB

L+N

BLOB

java.lang.byte[]

-4

Types.LONGVARBINARY

TEXT

65535

VARCHAR

java.lang.String

-1

Types.LONGVARCHAR

INTEGER

4

INTEGER UNSIGNED

java.lang.Long

4

Types.INTEGER

TINYINT

3

TINYINT UNSIGNED

java.lang.Integer

-6

Types.TINYINT

SMALLINT

5

SMALLINT UNSIGNED

java.lang.Integer

5

Types.SMALLINT

MEDIUMINT

8

MEDIUMINT UNSIGNED

java.lang.Integer

4

Types.INTEGER

BIT

1

BIT

java.lang.Boolean

-7

Types.BIT

BIGINT

20

BIGINT UNSIGNED

java.math.BigInteger

-5

Types.BIGINT

FLOAT

4+8

FLOAT

java.lang.Float

7

Types.REAL

DOUBLE

22

DOUBLE

java.lang.Double

8

Types.DOUBLE

DECIMAL

11

DECIMAL

java.math.BigDecimal

3

Types.DECIMAL

BOOLEAN

1

同TINYINT

java.lang.Integer

-6

Types.TINYINT

DATE

10

DATE

java.sql.Date

91

Types.DATE

TIME

8

TIME

java.sql.Time

92

Types.TIME

DATETIME

19

DATETIME

java.sql.Timestamp

93

Types.TIMESTAMP

TIMESTAMP

19

TIMESTAMP

java.sql.Timestamp

93

Types.TIMESTAMP

YEAR

4

YEAR

java.sql.Date

91

Types.DATE

解决方法:1

更新hibernate方言(因为最新的hibernate言可能提供了对这种类型的支持)以下是言的汇总:

RDBMS方言

DB2

org.hibernate.dialect.DB2Dialect

DB2 AS/400

org.hibernate.dialect.DB2400Dialect

DB2 OS390

org.hibernate.dialect.DB2390Dialect

PostgreSQL

org.hibernate.dialect.PostgreSQLDialect

MySQL

org.hibernate.dialect.MySQLDialect

MySQL with InnoDB

org.hibernate.dialect.MySQLInnoDBDialect

MySQL with MyISAM

org.hibernate.dialect.MySQLMyISAMDialect

Oracle (any version)

org.hibernate.dialect.OracleDialect

Oracle 9i/10g

org.hibernate.dialect.Oracle9Dialect

Sybase

org.hibernate.dialect.SybaseDialect

Sybase Anywhere

org.hibernate.dialect.SybaseAnywhereDialect

Microsoft SQL Server

org.hibernate.dialect.SQLServerDialect

SAP DB

org.hibernate.dialect.SAPDBDialect

Informix

org.hibernate.dialect.InformixDialect

HypersonicSQL

org.hibernate.dialect.HSQLDialect

Ingres

org.hibernate.dialect.IngresDialect

Progress

org.hibernate.dialect.ProgressDialect

Mckoi SQL

org.hibernate.dialect.MckoiDialect

Interbase

org.hibernate.dialect.InterbaseDialect

Pointbase

org.hibernate.dialect.PointbaseDialect

FrontBase

org.hibernate.dialect.FrontbaseDialect

Firebird

org.hibernate.dialect.FirebirdDialect

以mysql为例:如果以前org.hibernate.dialect.MySQLDialect,那么现在改成:org.hibernate.dialect.MySQLInnoDBDialect

方法2: 如果更新方言还是不行,那可以自己写方言,并配置到hibernate中..

packagexm.helper;importjava.sql.Types;importorg.hibernate.Hibernate;importorg.hibernate.dialect.MySQLDialect;importorg.hibernate.dialect.function.StandardSQLFunction;public class XmMySQLDialect extendsMySQLDialect {publicXmMySQLDialect (){//把报错的类型注册到hibernate类型的映射中去....

registerHibernateType(-1, Hibernate.STRING.getName());//也可以把mysql类型注册到,比如hibernate支持longtext

registerColumnType(Types.VARCHAR, "longtext");

}

}

修改hibernate的配置文件:

xm.helper.XmMySQLDialect

方法3:

使用原生的jdbc,自己包装,不使用createSQLQuery()方法;

public List exeQuery(finalString sql) {final List results = new ArrayList();

sessionFactory.openSession().doWork(newWork() {public void execute(Connection paramConnection) throwsSQLException {

java.sql.PreparedStatement psta=paramConnection.prepareStatement(sql);

ResultSet rs=psta.executeQuery();int columnCount =rs.getMetaData().getColumnCount();while(rs.next()){

Object[] rows= newObject[columnCount];for (int j=0; j

rows[j]= rs.getObject(j+1);

}

results.add(rows);

}

rs.close();

psta.close();

paramConnection.close();

}

});returnresults;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
配置 Hibernate 的环境需要以下步骤: 1. 下载 Hibernate 的最新版本,并将其解压到本地文件夹中。 2. 在项目中添加 Hibernate 的 jar 包,包括 Hibernate 的核心包和依赖包。 3. 配置 Hibernate 的配置文件,命名为 hibernate.cfg.xml,并将其放在类路径下。 4. 在配置文件中配置数据库连接信息,包括数据库驱动、数据库连接 URL、用户名和密码等。 5. 配置 Hibernate 的映射文件,即将 Java 对象与数据库表进行映射。映射文件的命名为 *.hbm.xml。 6. 在代码中使用 Hibernate API 进行数据库的操作,包括增删改查等。 下面是一个简单的示例: 1. 下载 Hibernate 最新版本,并解压到本地文件夹 C:\hibernate。 2. 创建 Java 项目,并在项目中添加 Hibernate 的 jar 包。 3. 在项目的 src 目录下创建 hibernate.cfg.xml 文件,并配置数据库连接信息: ```xml <hibernate-configuration> <session-factory> <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/test</property> <property name="hibernate.connection.username">root</property> <property name="hibernate.connection.password">123456</property> <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property> </session-factory> </hibernate-configuration> ``` 4. 在项目的 src 目录下创建 User.hbm.xml 文件,并配置用户表的映射信息: ```xml <hibernate-mapping> <class name="com.example.User" table="user"> <id name="id" type="int"> <generator class="native"/> </id> <property name="name" type="string"/> <property name="age" type="int"/> </class> </hibernate-mapping> ``` 5. 在代码中使用 Hibernate API 进行数据库操作: ```java Configuration cfg = new Configuration().configure(); SessionFactory sf = cfg.buildSessionFactory(); Session session = sf.openSession(); Transaction tx = session.beginTransaction(); User user = new User(); user.setName("Tom"); user.setAge(20); session.save(user); tx.commit(); session.close(); sf.close(); ``` 以上就是配置 Hibernate 的基本步骤。需要注意的是,Hibernate 的配置和使用方法还有很多细节,需要根据实际情况进行调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值