name的数据类型是nvarchar吗?如果是改为varchar类型应该能运行,但是这个治标不治本,这是hibernate没映射nvarchar

刚才整理了一下varcharnvarchar的区别,然后用Hibernate映射到数据库时,发现String类型被映射为了varchar,就在网上找了一下怎样将String映射为nvarchar。

方法一:

对于String类型,你可能是这样映射的

[java] view plaincopy

 
  1. private String name;
  2. @Column(length = 20 , nullable = false , unique = true)
  3. public String getName() {
  4. return name;
  5. }

查看数据库,你会发现name字段应该是这样 name varchar(20);

现在我们修改一下Annotation,让他映射为 name nvarchar(20)

[java] view plaincopy

 
  1. private String name;
  2. @Column(length = 20 , nullable = false , unique = true , columnDefinition="nvarchar(20)")
  3. public String getName() {
  4. return name;
  5. }

再查看数据库,你会发现现在应该是 name nvarchar(20);

注意:加上columnDefinition之后,length好像没有作用了,必须要在columnDefinition的value中指定长度。

[java] view plaincopy

 
  1. private String name;
  2. @Column(nullable = false , unique = true , columnDefinition="nvarchar(20)")
  3. public String getName() {
  4. return name;
  5. }

方法二:

这个没有试,看上去应该可以。

就是继承SQLServerDialect ,写一个自己的,然后再xml中配置一下。

方法网址:http://stackoverflow.com/questions/1099413/how-can-hibernate-map-the-sql-data-type-nvarcharmax

[java] view plaincopy

 
  1. public class SQLServerNativeDialect extends SQLServerDialect {
  2. public SQLServerNativeDialect() {
  3. super();
  4. registerColumnType(Types.VARCHAR, "nvarchar($l)");
  5. registerColumnType(Types.CLOB, "nvarchar(max)");
  6. }
  7. public String getTypeName(int code, int length, int precision, int scale) throws HibernateException {
  8. if(code != 2005) {
  9. return super.getTypeName(code, length, precision, scale);
  10. } else {
  11. return "ntext";
  12. }
  13. }
  14. }

总结:

顺便查了一下columnDefinition,发现他可以设置默认值。Hibernate会把columnDefinition 的内容直接写在生成标的ddl中,因此语法必须正确。

[java] view plaincopy

 
  1. @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错误的更多相关文章

  1. No Dialect mapping for JDBC type: -1

    MySQL数据库中有张表的字段是text,查询出来后对应的java类型是String,Dialect设置为org.hibernate.dialect.MySQLDialect 运行的时候报错:No D ...

  2. 关于No Dialect mapping for JDBC type :-9 hibernate执行原生sql语句问题

    转自博客http://blog.csdn.net/xd195666916/article/details/5419316,同时感谢博主 今天做了个用hibernate直接执行原生sql的查询,报错No ...

  3. 1.org.hibernate.MappingException: No Dialect mapping for JDBC type: -9

    org.hibernate.MappingException: No Dialect mapping for JDBC type: -9 原因:Hibernate框架的方言(Dialect )没有数据 ...

  4. hibernate:MySQL No Dialect mapping for JDBC type: -1

    出处:(hibernate中使用原生的sql语句,报如下错误:) MySQL No Dialect mapping for JDBC type: -1 代码: List list = session. ...

  5. Hibernate 数据库方言配置;no dialect mapping for jdbc type:-9;生僻字

    最近因为生僻字在界面上显示为?: 主要原因是该字段在数据库中就是varchar类型,显示的就是?:如䶮(yan):现把varchar类型改为nvarchar类型:数据中能够正常显示: 但是Spring ...

  6. hibernate报错:org.hibernate.MappingException: No Dialect mapping for JDBC type: -1

    解决方法:自定义一个Hibernate Dialect. package com.yourcompany.util ; import java.sql.Types; import org.hibern ...

  7. Hibernate映射数据库中longtext类型属性时报错No Dialect mapping for JDBC type: -1的解决方案

    出现错误的原因是:hibernate中对于数据库的longtext数据类型不支持. 解决方案: 1.写个类集成方言,然后自己实现对longtext的支持 import java.sql.Types; ...

  8. ORACLE11g:No Dialect mapping for JDBC type: -9解决方案

    问题来源: 某个zhizhang同事不干活 好不容易干了个活 改了个字段长度,从varchar2(50) 改成了nvarchar(100) 结果因为方言问题,程序起不来了 字段类型也改不回来了 nnd ...

  9. (动态改变数据源遇到的问题)ORACLE11g:No Dialect mapping for JDBC type: -9解决方案

    在动态改变数据源时 hibernate配置不能使用Oracle官方的方言(org.hibernate.dialect.Oracle10gDialect) 做法写一个方言扩展类,缺什么类型,添加什么类型 ...

随机推荐

  1. Quartz.net官方开发指南[转]

    http://www.cnblogs.com/shanyou/category/102991.html

  2. python练习笔记——丑数的计算

    只包含因子2,3,5的正整数被称作丑数,比如4,10,12都是丑数,而7,23,111则不是丑数,另外1也不是丑数.——摘自百度百科 get_num = int(input("请您输入丑数的 ...

  3. shutdown 与 close 函数 的区别

    假设server和client 已经建立了连接,server调用了close, 发送FIN 段给client(其实不一定会发送FIN段,后面再说),此时server不能再通过socket发送和接收数据 ...

  4. 程序员Git代码托管平台

    程序员Git代码托管平台 说到Git代码托管平台,首先推荐的是GitHub,好多好的开源项目都来自GitHub,但是GitHub只能新建公开的Git仓库,私有 仓库要收费,如果你做的是一个开源项目,可 ...

  5. graphite的安装文档

    http://www.th7.cn/Program/Python/201603/783804.shtml https://lanjingling.github.io/2016/04/04/graphi ...

  6. openstack_swift源代码分析——Swift单机部署

    本文对在单机部署swift 当中每个细节做具体的介绍,并对配置做对应的解释 PC物理机    Ubuntu-12.04-desktop-64位 Swift 版本号:1.13.1 Swift-clien ...

  7. node.js 使用ejs模板引擎时后缀换成.html

    这是一个小技巧,看着.ejs的后缀总觉得不爽,使用如下方法,可以将模板文件的后缀换成我们习惯的.html. 1.在app.js的头上定义ejs: 代码如下: var ejs = require('ej ...

  8. JVM building

    http://hg.openjdk.java.net/jdk10/jdk10/raw-file/tip/README file:///D:/JDK/jdk11/jdk/doc/building.htm ...

  9. 基于jquery的邮箱输入联想插件开发

    js代码: /*create by code_bunny 20140701 973295131@qq.com https://github.com/OOP-Code-Bunny */ (functio ...

  10. python格式化

    1.百分号格式如下: %[(name)] [flags] [.precision] typecode (name):可选,获取指定key的值flags:可选,:width,占有宽度.precision ...