`
hai0378
  • 浏览: 529640 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Hibernate映射nvarchar

 
阅读更多

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

方法一:

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

 

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

 

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

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

 

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

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

 

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

 

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

 

方法二:

 

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

就是继承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.   
  8.     public String getTypeName(int code, int length, int precision, int scale) throws HibernateException {  
  9.         if(code != 2005) {  
  10.             return super.getTypeName(code, length, precision, scale);  
  11.         } else {  
  12.             return "ntext";  
  13.         }  
  14.     }  
  15. }  

总结:

        顺便查了一下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片段 (这可能导致无法在不同数据库间移植)

分享到:
评论

相关推荐

    Hibernate自动生成数据库表映射实体类

    case Types.NVARCHAR: case Types.CHAR: typeInJava = "String"; break; case Types.TINYINT: case Types.SMALLINT: case Types.INTEGER: typeInJava = useInteger ? "Integer" : "int"; break; case ...

    Hibernate中数据类型

    Hibernate,作为一款流行的Java持久化框架,提供了一种方便的方式来处理这种映射关系,使得我们可以轻松地在Java对象和数据库记录之间转换。 **1. Hibernate 数据类型** Hibernate 提供了多种数据类型,用于匹配...

    hibernate3.0例子源码

    hibernate3.0连接SQLServer代码简单例子,单表t_user例子,可以运行。 数据库表设计 CREATE TABLE [dbo].[t_user]( [t_id] [nvarchar](50) NOT NULL, [t_login_name] [nvarchar](50) NULL, [t_password] ...

    从数据类型 nvarchar 转换为 numeric 时出错.pdf

    在本案例中,从数据类型nvarchar转换为numeric时出现错误。这是因为在进行数据类型转换时,数据的内容需要符合目标数据类型的要求。例如,nvarchar是用于存储字符串的,而numeric是用于存储数字的。如果nvarchar类型...

    SQL Server中,varchar和nvarchar如何选择?

    在SQL Server中,选择使用`varchar`还是`nvarchar`数据类型是数据库设计中的一个重要决策,因为这直接影响到数据存储的效率、空间占用以及兼容性。理解这两种数据类型的差异至关重要。 `varchar`是一种变长字符串...

    nvarchar binary数据类型转换

    比如,当`nvarchar`中的非ASCII字符无法映射到`binary`数据的字符集时,或者`binary`数据原本就是非字符数据,尝试转换回`nvarchar`时,就会出现问题。因此,在进行数据类型转换时,必须清楚了解数据的内容和预期的...

    解决繁体-批量转化varchar为nvarchar

    因最近自己制作的软件需运行在简繁系统中,但数据库设计时...此脚本可批量处理数据库内所有char和varchar转换为nchar和nvarchar,已集成重建主键,约束,索引,此脚本没有启用事务,运行前请备份原数据库或手动增加事务

    Struts2.1.6+Hibernate3.3.2+Spring2.5.5+Extjs3.0.0+Annotations

    Hibernate是一个面向对象的持久层框架,它可以将Java对象映射到数据库表中,从而实现对象关系映射(ORM)。Hibernate3.3.2版本支持二级缓存、批量更新等功能,提高了数据访问性能。 **3. Spring2.5.5** Spring框架...

    Sqlserver中char,nchar,varchar与Nvarchar的区别分析

    在SQL Server中,字符数据类型是用来存储文本信息的,包括char、nchar、varchar和nvarchar。这四个数据类型都有各自的特点和用途,下面我们逐一详细分析它们的区别。 1. **char类型**: - char是固定长度的字符...

    Struts+Hibernate的一个好用分页实例

    ### Struts+Hibernate 分页实例详解 #### 一、引言 在Web开发中,分页是提升用户体验的重要手段之一。对于大型应用而言,合理的分页处理不仅能减轻服务器压力,还能提高系统的响应速度。本文将详细介绍如何利用...

    SQLServer中char、varchar、nchar、nvarchar的区别

    在SQL Server数据库管理系统中,字符数据类型是存储文本信息的基础,包括`char`、`varchar`、`nchar`和`nvarchar`等几种常见的类型。这些数据类型在存储字符串时有着不同的特性和用途,理解它们之间的区别对于正确...

    char、varchar、nchar、nvarchar四种类型的区别

    ### char、varchar、nchar、nvarchar 四种类型的区别 在数据库设计中,选择合适的字段类型对于确保数据的准确性和提高查询效率至关重要。对于字符类型的字段,SQL Server 提供了 `char`、`varchar`、`nchar` 和 `...

    Oralce中VARCHAR2()与NVARCHAR2()的区别介绍

    在Oracle数据库中,VARCHAR2()和NVARCHAR2()都是用于存储字符数据的变量长度数据类型,但它们之间存在显著的差异。以下是对这两个数据类型的详细解释: 1. VARCHAR2() VARCHAR2() 是Oracle中的标准可变长度字符...

    过程需要参数 '@statement' 为 'ntext/nchar/nvarchar' 类型

    当你遇到错误提示"过程需要参数 '@statement' 为 'ntext/nchar/nvarchar' 类型"时,这通常意味着你试图调用一个存储过程,并且该过程期望一个特定类型的参数,即`ntext`、`nchar`或`nvarchar`,但你在实际调用时没有...

    PHP连接MSSQL时nvarchar字段长度被截断为255的解决方法

    然而,在MSSQL中,nvarchar类型的字段可以存储最多4000个Unicode字符,远超于255。 为了解决这个问题,我们可以采用SQL语句中的CAST函数来转换字段的数据类型。CAST函数允许我们将一个表达式转换为另一种数据类型。...

    深入char、varchar、text和nchar、nvarchar、ntext的区别详解

    本文将深入探讨`CHAR`、`VARCHAR`、`TEXT`以及`NCHAR`、`NVARCHAR`、`NTEXT`的区别,帮助开发者做出更明智的选择。 1. **CHAR**: - `CHAR`是一种定长字符串类型,它会为每个字段预留指定的字节数,无论实际存储的...

    SQL数据类型nchar_char_varchar与nvarchar区别

    nchar_char_varchar与nvarchar有何区别?

    sql中varchar和nvarchar的区别与使用方法

    问: sql server中的varchar和Nvarchar有什么区别啊,varchar好像是一个英文和一个汉字都站两个字节,而Nvarchar则是一个英文占一个字节,汉字占两个字节。可是这个对asp程序有什么影响? 答: varchar(n) 长度为 ...

    nhibernate教程

    - 映射文件中需要指定.NET类与数据库表的映射规则,例如主键映射、属性映射等。 3. **数据查询与操作**: - NHibernate提供了多种查询方式,包括HQL(Hibernate Query Language)、Criteria API等。 - 可以通过...

    基于SQL Server中char,nchar,varchar,nvarchar的使用区别

    对于程序中的一般字符串类型的字段,SQL Server中有char、varchar、nchar、nvarchar四种类型来对应,那么这四种类型有什么区别呢,这里做一下对比。 1.定长或变长 所谓定长就是长度固定,当要保存的数据长度不够时将...

Global site tag (gtag.js) - Google Analytics