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. printDocument设置适应边框打印 特重要 找了半天 设置一个属性即可

    private void pd_PrintPage(object sender, PrintPageEventArgs e) { e.Graphics.SmoothingMode = System.D ...

  2. python学习笔记——线程threading (一)

    1 线程threading 1.1 基本概述 也被称为轻量级的进程. 线程是计算机多任务编程的一种方式,可以使用计算机的多核资源. 线程死应用程序中工作的最小单元 1.2 线程特点 (1)进程的创建开 ...

  3. 线程模型、pthread 系列函数 和 简单多线程服务器端程序

    一.线程有3种模型,分别是N:1用户线程模型,1:1核心线程模型和N:M混合线程模型,posix thread属于1:1模型. (一).N:1用户线程模型 “线程实现”建立在“进程控制”机制之上,由用 ...

  4. Python min() 方法

    描述 Python min() 方法返回字符串中最小的字母(26个字母中最小的是A). 语法 min() 方法语法: min(S) 参数 S -- 字符串. 返回值 返回字符串中最小的字母. 实例 以 ...

  5. SpringSecurityFilter 链

    1. HttpSessionContextIntegrationFilter 位于过滤器顶端,第一个起作用的过滤器. 用途一,在执行其他过滤器之前,率先判断用户的session中是否已经存在一个Sec ...

  6. sphinx 配置文件全解析(转)

    sphinx的配置文件是在配置的时候最容易出错的了: 我们先要明白几个概念: source:数据源,数据是从什么地方来的. index:索引,当有数据源之后,从数据源处构建索引.索引实际上就是相当于一 ...

  7. Oracle学习笔记之三,Oracle 11g数据库的启动与关闭

    SQL*PLus命令 SQLPLUS username[/password][@connect_identifier][AS SYSOPER|SYSDAB] 1. 启动数据库实例 STARTUP [n ...

  8. [javase学习笔记]-6.3 对象的内存体现

    这一节我们来简单的看一看对象在内存中是什么样子呢,怎样体现. 我们以上一节的測试代码为例. 我们在函数的内存分配分析过.当该代码执行时,首先会载入主函数在栈内存中为main函数分配一个空间: 然后执行 ...

  9. 逆向随笔 - switch 语句深入分析

    switch case 语句在c语言里还是比較简单的.可是被编译出来之后,优化结果往往让人非常疑惑.全然看不懂,以下我们一次次的尝试,看看编译器究竟把switch语句变成什么样了.   ① 先上个最简 ...

  10. C++ 11 nullptr关键字

    熟悉C++的童鞋都知道,为了避免“野指针”(即指针在首次使用之前没有进行初始化)的出现,我们声明一个指针后最好马上对其进行初始化操作.如果暂时不明确该指针指向哪个变量,则需要赋予NULL值.除了NUL ...