使用Hibernate 创建数据表时,如何使数据库中的字段的长度和Hibernate映射的长度相等呢?
2016-05-30 18:28
639 查看
length: 指定该属性所映射数据列的字段的长度
小细节: 如果你想让映射文件在数据库中创建的的 字段是length设置的值的话,
必须要包column属性配置到property中,否则不会成length设置不会成功。
示例如下:
如下设置就不会创建成功:
<?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配置的小细节
观察:关系映射文件中的name和shiYan
的 column 配置的位置 ,即其次是否在数据库中映射成功!
小细节: 如果你想让映射文件在数据库中创建的的 字段是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配置的小细节
观察:关系映射文件中的name和shiYan
的 column 配置的位置 ,即其次是否在数据库中映射成功!
相关文章推荐
- oracle-5-的升级步骤
- C# 执行mysql 存储过程
- sp_create_table_sql2MySql 将sqlserver表结构平迁mysql
- oracle 性能优化建议小结
- SQL server模糊查询
- powerdesigner 绘制表关系和导出sql
- sql update
- Redis 代理服务Twemproxy
- mysql 主从同步
- 实战模拟监控MySQL服务shell脚本小结
- 当JPA遇上MySQL表名全大写
- sqlserver 下三种批量插入数据的方法
- 在ubuntu下安装mongodb
- mysql-5.7.12-winx64安装版配置、使用
- MongoDB 数据类型
- Ioc容器
- SQL Server 表变量和临时表的区别
- Oracle安装(11g)静默安装
- Sqlite表结构简单分析
- MySQL常见报错解决方法