[Hibernate系列—] 3. 映射文件和使用SchemaExport制作自己主动Schema
2015-08-10 09:36
417 查看
自己定义映射文件
这里的映射文件指的是相应到数据库表的xml 的定义文件。相应的每一个数据库表栏位, 能够定义的属性有:
属性名 | 类型 | Description |
---|---|---|
length | number | 栏位的长度 |
precision | number | precision表示数字中的有效位。假设没有指定precision的话。Oracle将使用38作为精度 |
scale | number | scale表示数字小数点右边的位数。scale默认设置为0. 假设把scale设成负数,Oracle将把该数字取舍到小数点左边的指定位数。 |
not-null | trueor false | 是否为空 |
unique | trueor false | 值是否唯一 |
index | string | The name of a multi-column index |
unique-key | string | The name of a multi-column unique constraint |
foreign-key | string | The name of the foreign key constraint generated for an association. This applies to <one-to-one>, <many-to-one>, <key>, and <many-to-many> mapping elements. inverse="true"sides are skipped by SchemaExport. |
sql-type | string | Overrides the default column type. This applies to the <column> element only. |
default | string | Default value for the column |
check | string | An SQL check constraint on either a column or atable |
1. 设置 映射元素的length, precision 和 scale
<property name="zip" length="5"/> <property name="balance" precision="12" scale="2"/>
2. 设置 not-null, UNIQUE, unique-key
not-null 如为true,指名该字段不同意为null,默认false
unique 如为true,指名该字段具有唯一约束,默认false
unique-key 为多个字段设定唯一约束
<many-to-one name="bar" column="barId" not-null="true"/> <element column="serialNumber" type="long" not-null="true" unique="true"/> <many-to-one name="org" column="orgId" unique-key="OrgEmployeeId"/> <property name="employeeId" unique-key="OrgEmployee"/>
3. 设置 index 和
foreign-key
foreign-key 为外键约束命名,在<many-to-many><one-to-one><key><many-to-one>元素中包括
foreign-key属性,在双向关联中,inverse属性为true的一端不能设置foreign-key
ndex 给一个或多个字段建立索引
<many-to-one name="bar" column="barId" foreign-key="FKFooBar"/>
4. 设置 child 元素
当有多个数据库栏位组成一个类的属性
<property name="name" type="my.customtypes.Name"/> <column name="last" not-null="true" index="bar_idx" length="30"/> <column name="first" not-null="true" index="bar_idx" length="20"/> <column name="initial"/> </property>
5. 设置默认值
<property name="credits" type="integer" insert="false"> <column name="credits" default="10"/> </property> <version name="version" type="integer" insert="false"> <column name="version" default="0"/> </version>
6. 设置 sql-type
sql-type 设定字段sql类型
<property name="balance" type="float"> <column name="balance" sql-type="decimal(13,3)"/> </property>
7. 设置 check
check 设定sql检查约束
<property name="foo" type="integer"> <column name="foo" check="foo > 10"/> </property> <class name="Foo" table="foos" check="bar < 100.0"> ... <property name="bar" type="float"/> </class>
8. 加入凝视
<class name="Customer" table="CurCust"> <comment>Current customers only</comment> ... </class>
使用SchemaExport 工具产生数据库DDL 脚本
以[Hibernate系列—] 1. 下载与试用Hibernate(MySQL与Oracle 配置)
这一篇的Usr.hbm.xml 为例,介绍怎样使用命名行的方式产生DDl.cmd 到 Eclipse 创建的project的 bin 文件夹下,
运行:
java -cp .;../lib/hibernate-core-4.3.5.Final.jar;../lib/jboss-logging-3.1.3.GA.jar;../lib/jboss-transaction-api_1.2_spec-1.0.0.Final.jar;../lib/dom4j-1.6.1.jar;../lib/hibernate-commons-annotations-4.0.4.Final.jar;../lib/ojdbc14.jar;../lib/javassist-3.18.1-GA.jar;../lib/jandex-1.1.0.Final.jar;../lib/hibernate-jpa-2.1-api-1.0.0.Final.jar org.hibernate.tool.hbm2ddl.SchemaExport --config=hibernate.cfg.xml --output=my_schema.ddl能够看到产生的 my_schema.ddl 文件的内容例如以下:
代码方式产生DDL脚本并运行
除了使用命令行外。 还能够使用代码的方式产生DDL 并运行这个DDL.在bibernate.cfg.xml 配置好的前提下, 运行下面代码:
public static void main(String[] args) { // TODO Auto-generated method stub Configuration cfg = new Configuration().configure(); new SchemaExport(cfg).create(true, true); }
create 方法有两个參数:
1. 第一个參数设置是否输出DDL到控制台,
假设设置成true, 在控制台就能够看到下面相似的SQL
2. 第二个參数设置是否要在Db 中运行这个SQL
相关文章推荐
- Distribution money
- Clojure发音
- 计蒜客 难题题库 125 删除字母'c'
- 为github帐号添加SSH keys
- Modis水汽数据MOD05去条带和转投影的问题
- Mac OS下配置远程Linux 服务器SSH密钥认证自动登录
- 线段树之poj 3468 A Simple Problem with Integers
- Android总结篇系列:Activity Intent Flags及Task相关属性
- 计蒜客 难题题库 124 子串在母串中出现的次数
- 区间最小值 线段树 (2015年 JXNU_ACS 算法组暑假第一次周赛)
- 微信开发(2)OAuth2.0
- jQuery: 图片不完全按比例自动缩小
- iOS 开发小技巧
- ssky-keygen + ssh-copy-id 无密码登陆远程LINUX主机
- 入市炒股前必读的10本经典书
- Java:判断IP4地址合法性
- Unity3D 灰度shader(改编自NGUI)
- 官网的shader stencilBuffer篇(续)
- iOS 9之SFSafariViewController
- 我们又换老师了