执行sql出现No Dialect mapping for JDBC type: -9错误
name的数据类型是nvarchar吗?如果是改为varchar类型应该能运行,但是这个治标不治本,这是hibernate没映射nvarchar
刚才整理了一下varchar和nvarchar的区别,然后用Hibernate映射到数据库时,发现String类型被映射为了varchar,就在网上找了一下怎样将String映射为nvarchar。
方法一:
对于String类型,你可能是这样映射的
- private String name;
- @Column(length = 20 , nullable = false , unique = true)
- public String getName() {
- return name;
- }
查看数据库,你会发现name字段应该是这样 name varchar(20);
现在我们修改一下Annotation,让他映射为 name nvarchar(20)
- private String name;
- @Column(length = 20 , nullable = false , unique = true , columnDefinition="nvarchar(20)")
- public String getName() {
- return name;
- }
再查看数据库,你会发现现在应该是 name nvarchar(20);
注意:加上columnDefinition之后,length好像没有作用了,必须要在columnDefinition的value中指定长度。
- private String name;
- @Column(nullable = false , unique = true , columnDefinition="nvarchar(20)")
- public String getName() {
- return name;
- }
方法二:
这个没有试,看上去应该可以。
就是继承SQLServerDialect ,写一个自己的,然后再xml中配置一下。
方法网址:http://stackoverflow.com/questions/1099413/how-can-hibernate-map-the-sql-data-type-nvarcharmax
- public class SQLServerNativeDialect extends SQLServerDialect {
- public SQLServerNativeDialect() {
- super();
- registerColumnType(Types.VARCHAR, "nvarchar($l)");
- registerColumnType(Types.CLOB, "nvarchar(max)");
- }
- public String getTypeName(int code, int length, int precision, int scale) throws HibernateException {
- if(code != 2005) {
- return super.getTypeName(code, length, precision, scale);
- } else {
- return "ntext";
- }
- }
- }
总结:
顺便查了一下columnDefinition,发现他可以设置默认值。Hibernate会把columnDefinition 的内容直接写在生成标的ddl中,因此语法必须正确。
- @Column(columnDefinition="int default 0",nullable=false)
columnDefinition
public abstract java.lang.String columnDefinition
(Optional) The SQL fragment that is used when generating the DDL for the column.
Defaults to the generated SQL to create a column of the inferred type.
Default:""
(摘)可选: 为这个特定字段覆盖sql DDL片段 (这可能导致无法在不同数据库间移植)
来源:http://hai0378.iteye.com/blog/2038872
执行sql出现No Dialect mapping for JDBC type: -9错误的更多相关文章
- No Dialect mapping for JDBC type: -1
MySQL数据库中有张表的字段是text,查询出来后对应的java类型是String,Dialect设置为org.hibernate.dialect.MySQLDialect 运行的时候报错:No D ...
- 关于No Dialect mapping for JDBC type :-9 hibernate执行原生sql语句问题
转自博客http://blog.csdn.net/xd195666916/article/details/5419316,同时感谢博主 今天做了个用hibernate直接执行原生sql的查询,报错No ...
- 1.org.hibernate.MappingException: No Dialect mapping for JDBC type: -9
org.hibernate.MappingException: No Dialect mapping for JDBC type: -9 原因:Hibernate框架的方言(Dialect )没有数据 ...
- hibernate:MySQL No Dialect mapping for JDBC type: -1
出处:(hibernate中使用原生的sql语句,报如下错误:) MySQL No Dialect mapping for JDBC type: -1 代码: List list = session. ...
- Hibernate 数据库方言配置;no dialect mapping for jdbc type:-9;生僻字
最近因为生僻字在界面上显示为?: 主要原因是该字段在数据库中就是varchar类型,显示的就是?:如䶮(yan):现把varchar类型改为nvarchar类型:数据中能够正常显示: 但是Spring ...
- hibernate报错:org.hibernate.MappingException: No Dialect mapping for JDBC type: -1
解决方法:自定义一个Hibernate Dialect. package com.yourcompany.util ; import java.sql.Types; import org.hibern ...
- Hibernate映射数据库中longtext类型属性时报错No Dialect mapping for JDBC type: -1的解决方案
出现错误的原因是:hibernate中对于数据库的longtext数据类型不支持. 解决方案: 1.写个类集成方言,然后自己实现对longtext的支持 import java.sql.Types; ...
- ORACLE11g:No Dialect mapping for JDBC type: -9解决方案
问题来源: 某个zhizhang同事不干活 好不容易干了个活 改了个字段长度,从varchar2(50) 改成了nvarchar(100) 结果因为方言问题,程序起不来了 字段类型也改不回来了 nnd ...
- (动态改变数据源遇到的问题)ORACLE11g:No Dialect mapping for JDBC type: -9解决方案
在动态改变数据源时 hibernate配置不能使用Oracle官方的方言(org.hibernate.dialect.Oracle10gDialect) 做法写一个方言扩展类,缺什么类型,添加什么类型 ...
随机推荐
- 【js】sort()
//为了实现排序,sort()方法会调用每个数组项的toString()转型方法,然后比较得到的字符串, //以确定如何排序.即使数组中的每一项都是数值,sort()方法比较的也是字符串, var v ...
- 【js】typeof与instanceof
typeof 运算符 返回一个用来表示表达式的数据类型的字符串. typeof[()expression[]] ; expression 参数是需要查找类型信息的任意表达式. 说明 typeof 运算 ...
- PO_全局一揽子采购协议(流程)
2014-06-04 BaoXinjian
- Android 轻松实现语音识别
2010-11-12 17:01:51 标签:休闲 职场 Android 语音识别 移动开发 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任 ...
- mac下设置mongodb开机启动方法
Mac OS 的开机启动方式 launchd 是 Mac OS 下用于初始化系统环境的关键进程,它是内核装载成功之后在OS环境下启动的第一个进程.其实它的作用就是我们平时说的守护进程,简单来说,用户守 ...
- Oracle学习笔记之一,重温范式
第一范式(1NF) 第一范式是第二和第三范式的基础,是最基本的范式.第一范式包括下列的指导原则: 数据组的每个属性只可以包含一个值. 关系中的每个数组必须只包含相同数量的值. 关系中的每个数组一定不能 ...
- Firefox清空缓存的快捷键
有时候调试网页,需要清空缓存,常用的firefox清空缓存的快捷键: Shift+Ctrl+Delete
- 【Android】5.0 第5章 常用基本控件--本章示例主界面
分类:C#.Android.VS2015: 创建日期:2016-02-06 这一章主要介绍Android简单控件的基本用法.本章源程序共有9个示例,这些示例都在同一个项目中. 项目名:ch05demo ...
- scheduleOnce
//程序开始后延时2秒才开始addSprite函数 scheduleOnce(schedule_selector(Issue1305::addSprite), ); 转到定义: void CCNode ...
- ny10 skilng
skiing 时间限制:3000 ms | 内存限制:65535 KB 难度:5 描述 Michael喜欢滑雪百这并不奇怪, 因为滑雪的确很刺激.可是为了获得速度,滑的区域必须向下倾斜,而且当你滑 ...