`
hai0378
  • 浏览: 533622 次
  • 性别: 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 提供了多种数据类型,用于匹配...

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

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

    nhibernate教程

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

    NHibernte+ASP。NET_MVC+JQuery实现增删改查

    - `<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">`:指定 NHibernate 的命名空间。 - `<class>`:定义了要映射的类和表名。 - `<id>`:定义了主键字段。 - `<property>`:定义了其他属性字段。 ####...

    解决sql server保存对象字符串转换成uniqueidentifier失败的问题

    在Hibernate映射文件中,ID的生成策略设置为`uuid.hex`,这意味着在持久化对象时,会尝试将一个由`uuid.hex`生成的16进制字符串转换为`uniqueidentifier`,导致了错误。 解决这个问题的方法是将映射文件中的ID生成...

Global site tag (gtag.js) - Google Analytics