关闭

使用Hibernate 创建数据表时,如何使数据库中的字段的长度和Hibernate映射的长度相等呢?

2661人阅读 评论(1) 收藏 举报
分类:
length: 指定该属性所映射数据列的字段的长度
小细节: 如果你想让映射文件在数据库中创建的的 字段是length设置的值的话,
必须要包column属性配置到property中,否则不会成length设置不会成功。
示例如下:

        <property name="shiYan" type="java.lang.String"  unique="true" 
        	 update="false" index="person_index" column="SHI_YAN" length="20" >
        	
       </property>



如下设置就不会创建成功:

        <property name="shiYan" type="java.lang.String"  unique="true" 
        	 update="false" index="person_index" length="20" >
        	<column name="SHI_YAN"></column>
       </property>

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- Generated 2016-5-17 14:39:37 by Hibernate Tools 3.4.0.CR1 -->

<hibernate-mapping package="com.baidu.cfghbm">

    <class name="Person" table="PERSON"  dynamic-update="true">
    
        <id name="id" type="java.lang.Integer">
            <column name="ID" />
            <generator class="native" />
        </id>
        
        <property name="name" type="java.lang.String" column="NAME" length="30" >
          
        </property>
        
        <property name="shiYan" type="java.lang.String"  unique="true" 
        	 update="false" index="person_index" length="20" >
   	  <!-- 
   	 	name:	指定该持久化类的属性的名字
   	 	column:	指定与类的属性映射的表的字段名. 如果没有设置该属性, Hibernate 将直接使用类的属性名作为字段名. 
   	 	type:	指定 Hibernate 映射类型. Hibernate 映射类型是 Java 类型与 SQL 类型的桥梁. 如果没有为某个属性显式设定映射类型, 
   	 		 	Hibernate 会运用反射机制先识别出持久化类的特定属性的 Java 类型, 然后自动使用与之对应的默认的 Hibernate 映射类型.
   	 	unique: 设置是否为该属性所映射的数据列添加唯一约束. 
   	 	access:	指定 Hibernate 的默认的属性访问策略。默认值为 property, 即使用 getter, setter 方法来访问属性. 若指定 field, 
   	 			则 Hibernate 会忽略 getter/setter 方法, 而通过反射访问成员变量
   	 	not-null:若该属性值为 true, 表明不允许为 null, 默认为 false
   	 	update: 	设置为 false ,表示不允许被修改,true表示可以被修改
   	 	index: 	指定一个字符串的索引名称. 当系统需要 Hibernate 自动建表时, 用于为该属性所映射的数据列创建索引, 从而加快该数据列的查询.
   	 	scale: 	指定该属性所映射数据列的小数位数, 对 double, float, decimal 等类型的数据列有效.
   	 	formula:设置一个 SQL 表达式, Hibernate 将根据它来计算出派生属性的值. 
   	 			派生属性: 并不是持久化类的所有属性都直接和表的字段匹配, 持久化类的有些属性的值必须在运行时通过计算才能得出来, 
   	 				          这种属性称为派生属性
   	 			使用 formula 属性时
					formula=“(sql)” 的英文括号不能少
					Sql 表达式中的列名和表名都应该和数据库对应, 而不是和持久化对象的属性对应
					如果需要在 formula 属性中使用参数, 这直接使用 where cur.id=id 形式, 其中 id 就是参数, 
					和当前持久化对象的 id 属性对应的列的 id 值将作为参数传入. 
		
			length: 指定该属性所映射数据列的字段的长度
			小细节: 如果你想让映射文件在数据库中创建的的 字段是length设置的值的话,
				    必须要包column属性配置到property	中,否则不会成length设置不会成功。
				    示例如下:
			 <property name="shiYan" type="java.lang.String" column="SHI_YAN" length="20"></property>	    			
     	  -->
        	<column name="SHI_YAN"></column>
       </property>
       
        <property name="interest" type="java.lang.String">
            <column name="INTEREST" />
        </property>
        
        <property name="birth" type="time" index="person_index">
            <column name="BIRTH" />
        </property>
        
        <!-- 映射派送属性 -->
        <property name="desc" formula="(SELECT concat(name,':',birth) FROM PERSON p WHERE p.id = id)"></property>
        
        <!-- 映射大对象 
        <property name="content" type="clob"></property>
        	下面的反射是精确映射content 类型
         -->
        <property name="content">
        	<column name="CONTENT" sql-type="mediumtext"></column>
        </property>
  
        <!-- 映射二进制
        <property name="image" type="blob"></property>
        	下面的方式是精确映射image 的类型
  		 -->
        <property name="image" type="blob">
        	<column name="IMAGE" sql-type="mediumblob" />
        </property>
  
    </class>
    
</hibernate-mapping>


再次验证length配置的小细节

观察:关系映射文件中的nameshiYan 的 column 配置的位置 ,即其次是否在数据库中映射成功!





0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

hibernate中xxx.hbm.xml配置中length属性

例如你在数据库中设置username的varchar(50),但在
  • u012889638
  • u012889638
  • 2014-06-18 20:50
  • 1660

Hibernate框架基础——映射普通属性

持久化对象与OID对持久化对象的要求 提供一个无参的构造器。使Hibernate可以使用Constructor.newInstance()来实例化持久化类。 提供一个标识属性(identifier p...
  • yerenyuan_pku
  • yerenyuan_pku
  • 2016-10-05 18:09
  • 1349

hibernate 映射文件配置默认值方法

hibernate 映射文件配置默认值方法
  • educast
  • educast
  • 2016-05-28 15:37
  • 5917

hibernate处理数据库中text类型

hibernate默认不支持text类型的,所以要修改方言源代码 my.util.MyDialect ${j...
  • wym1581
  • wym1581
  • 2015-05-05 17:04
  • 2912

java hibernate 映射和注解oracle含有blob字段的数据表的pojo源码

java hibernate 映射和注解oracle含有blob字段的数据表的pojo源码
  • baohuan_love
  • baohuan_love
  • 2013-12-16 18:29
  • 1908

设计数据库时字段类型和长度建议

对于任何字段长度都不应该过于小气,否则未知的变化会造成前后台都要修改                    ...
  • c1958
  • c1958
  • 2015-04-07 16:49
  • 2602

Hibernate 映射数据库中Json字段的解决方案

最近的项目ORM框架使用的是hibernate,数据库使用PostgreSQL,其中PostgreSQL包含Json数据类型的字段,这种类型意味着它可以像非关系型数据库那样存储数据,数据扩展性非常好,...
  • arenn
  • arenn
  • 2017-08-01 18:20
  • 491

Hibernate 实体类注解 Entity方式5、@Basic(fetch=FetchType,optional=true) 可选 @Basic表示一个简单的属性到数据库表的字段的映射,对于没有

Hibernate注解 1。@Entity(name="EntityName") 必须,name为可选,对应数据库中一的个表 2、@Table(name="",catalog...
  • ShangQuan2012
  • ShangQuan2012
  • 2016-09-08 15:56
  • 554

Hibernate 映射数据库中Json字段的解决方案

最近的项目ORM框架使用的是Hibernate,数据库使用PostgreSQL,俩个都是开源的高大上产品,Hibernate就不用说啦,主流的ORM框架,PostgreSQL第一次接触,其中包含Jso...
  • qian_meng
  • qian_meng
  • 2015-09-12 15:26
  • 4098

设计数据库时字段类型和长度建议

对于任何字段长度都不应该过于小气,否则未知的变化会造成前后台都要修改                   &...
  • VIPloveME
  • VIPloveME
  • 2011-01-12 12:50
  • 303
    个人资料
    • 访问:135734次
    • 积分:2754
    • 等级:
    • 排名:第15088名
    • 原创:135篇
    • 转载:47篇
    • 译文:0篇
    • 评论:18条
    最新评论