l详解

在Hibernate中,各表的映射文件….l可以通过工具生成,例如在使用MyEclipse开发时,它提供了自动生成映射文件的工具。配置文件的基本结构如下:
Xml代码
1 <?xml version="1.0" encoding='UTF-8'?> 
2  
3 <!DOCTYPE hibernate-mapping PUBLIC 
4     "-//Hibernate/Hibernate Mapping DTD 3.0//EN"  增白皂
5     "/hibernate-mapping-3.0.dtd"> 
6 <hibernate-mapping package="包名"> 
7   <class name="类名" table="表名"> 
8       <id name="主键java类中的字段名" column="对应表中字段" type="类型 "> 
9           <generator class="主键生成策略电能计量装置"/> 
10       </id> 
11  
12           …… 
13     </class> 
14 </hibernate-mapping> 
1. 主键(id
Hibernate的主键生成策略有如下几种:
1) assigned
主键由外部程序负责生成,在 save() 之前指定。
2) hilo
通过hi/lo 算法实现的主键生成机制,需要额外的数据库表或字段提供高位值来源。
3) seqhilo
与hilo 类似,通过hi/lo 算法实现的主键生成机制,需要数据库中的 Sequence,适用于支持 Sequence 的数据库,如Oracle。
4) increment
主键按数值顺序递增。此方式的实现机制为在当前应用实例中维持一个变量,以保存着当前的最大值,之后每次需要生成主键的时候将此值加1作为主键。这种方式可能产生的问题是:不能在集下使用。
5) identity
采用数据库提供的主键生成机制。如DB2、SQL Server、MySQL 中的主键生成机制。
6) sequence
采用数据库提供的 sequence 机制生成主键。如 Oralce 中的Sequence。
7) native
由 Hibernate 根据使用的数据库自行判断采用 identity、hilo、sequence 其中一种作为主键生成方式。
8) uuid.hex
由 Hibernate 基于128 位 UUID 算法 生成16 进制数值(编码后以长度32 的字符串表示)作为主键。
9) uuid.string
与uuid.hex 类似,只是生成的主键未进行编码(长度16),不能应用在 PostgreSQL 数据中。
10) foreign
使用另外一个相关联的对象的标识符作为主键。
主键配置举例如下:
Xml代码
15 <id name="id" column="id" type="java.lang.Integer"> 
16             <generator class="native"/> 
17 </id> 
另外还可以扩展Hibernate的类来做自己的主键生成策略,具体例子见:www.javaey
e/topic/93391。
2. 普通属性(property
      开发人员可以打开网址:/hibernate-mapping-3.0.dtd
来查看hibernate3.0的dtd信息,可看到property的定义如下:
Xml代码
18 <!ELEMENT property (meta*,(column|formula)*,type?)> 
19 频闪灯<!ATTLIST property name CDATA #REQUIRED> 
20 <!ATTLIST property node CDATA #IMPLIED> 
21 <!ATTLIST property access CDATA #IMPLIED> 
22 <!ATTLIST property type CDATA #IMPLIED> 
23 <!ATTLIST property column CDATA #IMPLIED> 
24 <!ATTLIST property length CDATA #IMPLIED> 
25 <!ATTLIST property precision CDATA #IMPLIED> 
26 <!ATTLIST property scale CDATA #IMPLIED> 
27 <!ATTLIST property not-null (true|false) #IMPLIED> 
28 <!ATTLIST property unique (true|false) "false"> 
29 <!ATTLIST property unique-key CDATA #IMPLIED> 
30 <!ATTLISTpropertyindexCDATA#IMPLIED>     
31  
32 <!ATTLIST property update (true|false) #IMPLIED> 
33 <!ATTLIST property insert (true|false) #IMPLIED> 
34 <!ATTLIST property optimistic-lock (true|false) "true">         
35  
36 <!ATTLIST property formula CDATA #IMPLIED> 
37 <!ATTLIST property lazy (true|false) "false"> 
38 <!ATTLIST property generated (never|insert|always) "never"> 
它的各属性中比较常用的有:name(对应的java类的属性名称)、column(对应的表中的字段)、type(属性的类型,eg.java.lang.String)、not-null(设置该属性是否为空,为true时表示非空,默认为false)和length(字段的长度限制)。 示例如下:
Xml代码
39 <property name="accessname" column="accessName" type="java.lang.String" not-null="true" /> 
40 <property name="state" column="state" type="java.lang.Byte" 氢键受体not-null="true" /> 
41 <property name="description" column="description" type="java.lang.String" /> 
3. 一对多关系(<many-to-one…/><set…></set>

      一对多关系一般是用在一个表与另一个表存在外键关联的时候,例如用户表的组织id与组织表存在外键关联,则“一”方为组织表,“多”方为用户表,因为一个组织可以包含多个用户,而一个用户只能隶属于一个组织。

    对于存在一对多关系和多对一关系的双方,需要在…l中进行相应配置,这时在“一”方(例如:组织)需要在映射文件中添加<set…></set>元素,因为它包含多个“多”方的对象,一般的格式如下:
Xml代码
42 <set name="java映射类中对应的属性" inverse="true" lazy="true"> 
43   <key column="表中对应字段"/> 
44     <one-to-many class="多方的类"/> 
45 </set> 
46  
47 <!-- 示例 --> 
48 <set name="userSet" inverse="true" lazy="true"> 
49       <key叶轮设计 干电池手机column="orgId"/> 
50       <one-to-many class="User"/> 
51 </set> 
“多”方(例如:用户)隶属于一个“一”方对象,一般的格式如下:
Xml代码
52 <many-to-one name="java映射类中对应的属性" column="表中对应字段" class="类名" not-null="true" /> 
53  
54 <!-- 示例 --> 
55 <many-to-one name="org" column="orgId" class="Organization" not-null="true" /> 
4. 一对一关系(<one-to-one…/>

一对一关系相对一对多关系来说比较少见,但也在某些情况下要用到,例如有一个用户的基本信息表(USER)和一个用户的密码表(PASSWD)就存在一对一的关系。下面来看一下一对一关系在Hibernate的配置。
Xml代码
56 <!-- 其中主表(eg. 用户的基本信息表)的配置 --> 
57  
58 <one-to-one name="主表对象中子表对象的属性名" class="子表对象的类名" cascade
="save-update"/> 
59  
60 <one-to-one name="password" class="com.amigo.dao.pojo.Passwd" cascade="save-update"/> 
61  
62 <!-- 子表(eg. 用户的密码表)的配置 --> 
63  
64 <one-to-one name="子表对象中主表对象的属性名" class="主表对象的类名" constrained="true" /> 
65  
66 <one-to-one name="user" class="com.amigo.dao.pojo.User " constrained="true" /> 
5. 多对多关系(<many-to-many…/>

在数据库设计时,一般将多对多关系转换为两个一对多(或多对一)关系,例如在基于角的权限系统中,用户和角存在的关系就是典型的多对多关系,即一个用户可以具有多个角,而一个角又可以为多个用户所有,一般在设计时,都会加一个用户与角的关联表,该表与用户表以及角表都存在外键关联。

在本小节中讲述的是没有分解的多对多关系在Hibernate中如何配置。设置格式如下:
Xml代码
67 <set name="java对象的属性名" table="表名" cascade="all" outer-join="false">   

本文发布于:2024-09-25 15:20:54,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/1/100557.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:主键   生成   用户   对象
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议