读书人

Hibernate的一对一联系关系实例lt;转amp;gt

发布时间: 2012-10-06 17:34:01 作者: rapoo

Hibernate的一对一关联实例<转>

Hibernate的一对一关联实例

Hibernate中的表的关联有一对一,一对多和多对多三种关联方式,在这篇笔记和接下来的笔记中,我将用我自己的实际例子来说明如何具体实施。
??????我使用的Hibernate版本是2.1.8,在Hibernate的网站2.1.6版本的中文文档中有关一对一的关联有下面一段表述:

Hibernate的一对一联系关系实例<转&gt5.1.11.?一对一
Hibernate的一对一联系关系实例<转&gt持久化对象之间一对一的关联关系是通过one-to-one元素定义的。?
Hibernate的一对一联系关系实例<转&gt
Hibernate的一对一联系关系实例<转&gt<one-to-one
Hibernate的一对一联系关系实例<转&gt????????name="propertyName"????????????????????????????????(1)
Hibernate的一对一联系关系实例<转&gt????????class="ClassName"??????????????????????????????????(2)
Hibernate的一对一联系关系实例<转&gt????????cascade="all|none|save-update|delete"??????????????(3)
Hibernate的一对一联系关系实例<转&gt????????constrained="true|false"???????????????????????????(4)
Hibernate的一对一联系关系实例<转&gt????????outer-join="true|false|auto"???????????????????????(5)
Hibernate的一对一联系关系实例<转&gt????????property-ref="propertyNameFromAssociatedClass"?????(6)
Hibernate的一对一联系关系实例<转&gt????????access="field|property|ClassName"??????????????????(7)
Hibernate的一对一联系关系实例<转&gt????????
Hibernate的一对一联系关系实例<转&gt/>
Hibernate的一对一联系关系实例<转&gt(1)?name:?属性的名字。?
Hibernate的一对一联系关系实例<转&gt?
Hibernate的一对一联系关系实例<转&gt(2)?class?(可选?-?默认是通过反射得到的属性类型):被关联的类的名字。?
Hibernate的一对一联系关系实例<转&gt?
Hibernate的一对一联系关系实例<转&gt(3)?cascade(级联)?(可选)?表明操作是否从父对象级联到被关联的对象。?
Hibernate的一对一联系关系实例<转&gt?
Hibernate的一对一联系关系实例<转&gt(4)?constrained(约束)?(可选)?表明该类对应的表对应的数据库表,和被关联的对象所对应的数据库表之间,通过一个外键引用对主键进行约束。这个选项影响save()和delete()在级联执行时的先后顺序(也在schema?export?tool中被使用)。?
Hibernate的一对一联系关系实例<转&gt?
Hibernate的一对一联系关系实例<转&gt(5)?outer-join(外连接)?(可选?-?默认为?自动):?当设置hibernate.use_outer_join的时候,对这个关联允许外连接抓取。?
Hibernate的一对一联系关系实例<转&gt?
Hibernate的一对一联系关系实例<转&gt(6)?property-ref:?(可选)?指定关联类的一个属性,这个属性将会和本外键相对应。如果没有指定,会使用对方关联类的主键。?
Hibernate的一对一联系关系实例<转&gt?
Hibernate的一对一联系关系实例<转&gt(7)?access?(可选?-?默认是?property):?Hibernate用来访问属性的策略。?
Hibernate的一对一联系关系实例<转&gt?
Hibernate的一对一联系关系实例<转&gt
Hibernate的一对一联系关系实例<转&gt有两种不同的一对一关联:?
Hibernate的一对一联系关系实例<转&gt
Hibernate的一对一联系关系实例<转&gt主键关联?
Hibernate的一对一联系关系实例<转&gt
Hibernate的一对一联系关系实例<转&gt惟一外键关联?
Hibernate的一对一联系关系实例<转&gt
Hibernate的一对一联系关系实例<转&gt主键关联不需要额外的表字段;两行是通过这种一对一关系相关联的,那么这两行就共享同样的主关键字值。所以如果你希望两个对象通过主键一对一关联,你必须确认它们被赋予同样的标识值!?
Hibernate的一对一联系关系实例<转&gt
Hibernate的一对一联系关系实例<转&gt比如说,对下面的Employee和Person进行主键一对一关联:?
Hibernate的一对一联系关系实例<转&gt
Hibernate的一对一联系关系实例<转&gt<one-to-one?name="person"?class="Person"/>
Hibernate的一对一联系关系实例<转&gt<one-to-one?name="employee"?class="Employee"?constrained="true"/>
Hibernate的一对一联系关系实例<转&gt现在我们必须确保PERSON和EMPLOYEE中相关的字段是相等的。我们使用一个特别的称为foreign的Hibernate标识符生成器策略:?
Hibernate的一对一联系关系实例<转&gt
Hibernate的一对一联系关系实例<转&gt<class?name="person"?table="PERSON">
Hibernate的一对一联系关系实例<转&gt????<id?name="id"?column="PERSON_ID">
Hibernate的一对一联系关系实例<转&gt????????<generator?class="foreign">
Hibernate的一对一联系关系实例<转&gt????????????<param?name="property">employee</param>
Hibernate的一对一联系关系实例<转&gt????????</generator>
Hibernate的一对一联系关系实例<转&gt????</id>
Hibernate的一对一联系关系实例<转&gt????Hibernate的一对一联系关系实例<转&gt
Hibernate的一对一联系关系实例<转&gt????<one-to-one?name="employee"
Hibernate的一对一联系关系实例<转&gt????????class="Employee"
Hibernate的一对一联系关系实例<转&gt????????constrained="true"/>
Hibernate的一对一联系关系实例<转&gt</class>
Hibernate的一对一联系关系实例<转&gt一个刚刚保存的Person实例被赋予和该Person的employee属性所指向的Employee实例同样的关键字值。?
Hibernate的一对一联系关系实例<转&gt
Hibernate的一对一联系关系实例<转&gt另一种方式是一个外键和一个惟一关键字对应,上面的Employee和Person的例子,如果使这种关联方式,应该表达成:?
Hibernate的一对一联系关系实例<转&gt
Hibernate的一对一联系关系实例<转&gt<many-to-one?name="person"?class="Person"?column="PERSON_ID"?unique="true"/>
Hibernate的一对一联系关系实例<转&gt如果在Person的映射加入下面几句,这种关联就是双向的:?
Hibernate的一对一联系关系实例<转&gt
Hibernate的一对一联系关系实例<转&gt<one-to-one?name"employee"?class="Employee"?property-ref="person"/>
Hibernate的一对一联系关系实例<转&gt??????
??????下面是我的一个一对一主键关联的例子,使用的数据库是MySQL 4.1.11:
??????我有两个表:UserBasic和UserInfo,UserBasic记录的是用户的基本注册信息,UserInfo表记录的是用户的详细信息。表的结构如下:

?1Hibernate的一对一联系关系实例<转&gtCREATE?TABLE?IF?NOT?EXISTS?UserBasic
?2Hibernate的一对一联系关系实例<转&gt(
?3Hibernate的一对一联系关系实例<转&gt???Guid???????????????????????????INT????????????????????????????NOT?NULL?AUTO_INCREMENT,
?4Hibernate的一对一联系关系实例<转&gt???Account????????????????????????VARCHAR(64)????????????????????NOT?NULL,
?5Hibernate的一对一联系关系实例<转&gt???Password???????????????????????VARCHAR(16)????????????????????NOT?NULL,
?6Hibernate的一对一联系关系实例<转&gt???Email??????????????????????????VARCHAR(128)???????????????????NOT?NULL,
?7Hibernate的一对一联系关系实例<转&gt???PRIMARY?KEY?(Guid)
?8Hibernate的一对一联系关系实例<转&gt)?TYPE=InnoDB;
?9Hibernate的一对一联系关系实例<转&gt
10Hibernate的一对一联系关系实例<转&gtCREATE?TABLE?IF?NOT?EXISTS?UserInfo
11Hibernate的一对一联系关系实例<转&gt(
12Hibernate的一对一联系关系实例<转&gt???Guid???????????????????????????INT????????????????????????????NOT?NULL,
13Hibernate的一对一联系关系实例<转&gt???Username???????????????????????VARCHAR(128),
14Hibernate的一对一联系关系实例<转&gt???Gender?????????????????????????CHAR(1),
15Hibernate的一对一联系关系实例<转&gt???Birthday???????????????????????DATETIME,
16Hibernate的一对一联系关系实例<转&gt???PRIMARY?KEY?(Guid)
17Hibernate的一对一联系关系实例<转&gt)?TYPE=InnoDB;
18Hibernate的一对一联系关系实例<转&gt
19Hibernate的一对一联系关系实例<转&gtALTER?TABLE?UserInfo?ADD?CONSTRAINT?UserInfoRFUserBasic?FOREIGN?KEY?(Guid)?
20Hibernate的一对一联系关系实例<转&gt???REFERENCES?UserBasic?(Guid)?ON?DELETE?CASCADE?ON?UPDATE?RESTRICT;
??????UserInfo的主键值和UserBasic的主键值是一样的,两个表是单向的一对一关系。UserBasic为主控方,UserInfo是被动方。
??????用Middlegen生成的UserBasic.hbm.xml文件,修改后的内容如下:

??1Hibernate的一对一联系关系实例<转&gt<?xml?version="1.0"?>
??2Hibernate的一对一联系关系实例<转&gt<!DOCTYPE?hibernate-mapping?PUBLIC
??3Hibernate的一对一联系关系实例<转&gt????"-//Hibernate/Hibernate?Mapping?DTD?2.0//EN"
??4Hibernate的一对一联系关系实例<转&gt????"http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd"?>
??5Hibernate的一对一联系关系实例<转&gt????
??6Hibernate的一对一联系关系实例<转&gt<hibernate-mapping>
??7Hibernate的一对一联系关系实例<转&gt<!--?
??8Hibernate的一对一联系关系实例<转&gt????Created?by?the?Middlegen?Hibernate?plugin?2.1
??9Hibernate的一对一联系关系实例<转&gt
?10Hibernate的一对一联系关系实例<转&gt????http://boss.bekk.no/boss/middlegen/
?11Hibernate的一对一联系关系实例<转&gt????http://www.hibernate.org/
?12Hibernate的一对一联系关系实例<转&gt-->
?13Hibernate的一对一联系关系实例<转&gt
?14Hibernate的一对一联系关系实例<转&gt<class?
?15Hibernate的一对一联系关系实例<转&gt????name="com.xxx.hibernate.UserBasic"?
?16Hibernate的一对一联系关系实例<转&gt????table="UserBasic"
?17Hibernate的一对一联系关系实例<转&gt????dynamic-update="true"
?18Hibernate的一对一联系关系实例<转&gt????dynamic-insert="true"
?19Hibernate的一对一联系关系实例<转&gt>
?20Hibernate的一对一联系关系实例<转&gt????<meta?attribute="class-description"?inherit="false">
?21Hibernate的一对一联系关系实例<转&gt???????@hibernate.class
?22Hibernate的一对一联系关系实例<转&gt????????table="UserBasic"
?23Hibernate的一对一联系关系实例<转&gt????????dynamic-update="true"
?24Hibernate的一对一联系关系实例<转&gt????????dynamic-insert="true"
?25Hibernate的一对一联系关系实例<转&gt????</meta>
?26Hibernate的一对一联系关系实例<转&gt
?27Hibernate的一对一联系关系实例<转&gt????<id
?28Hibernate的一对一联系关系实例<转&gt????????name="guid"
?29Hibernate的一对一联系关系实例<转&gt????????type="int"
?30Hibernate的一对一联系关系实例<转&gt????????column="Guid"
?31Hibernate的一对一联系关系实例<转&gt????>
?32Hibernate的一对一联系关系实例<转&gt????????<meta?attribute="field-description">
?33Hibernate的一对一联系关系实例<转&gt???????????@hibernate.id
?34Hibernate的一对一联系关系实例<转&gt????????????generator-alt="Hibernate的一对一联系关系实例<转&gt" style="max-width: 100%;height: auto;width: auto\9;" src="//img.reader8.net/uploadfile/jiaocheng/20140188/3040/201401301440589455.gif">????????????type="int"
?36Hibernate的一对一联系关系实例<转&gt????????????column="Guid"
?37Hibernate的一对一联系关系实例<转&gt
?38Hibernate的一对一联系关系实例<转&gt
?39Hibernate的一对一联系关系实例<转&gt????????</meta>
?40Hibernate的一对一联系关系实例<转&gt????????<generator?class="native"?/>
?41Hibernate的一对一联系关系实例<转&gt????</id>
?42Hibernate的一对一联系关系实例<转&gt
?43Hibernate的一对一联系关系实例<转&gt????<property
?44Hibernate的一对一联系关系实例<转&gt????????name="account"
?45Hibernate的一对一联系关系实例<转&gt????????type="java.lang.String"
?46Hibernate的一对一联系关系实例<转&gt????????column="Account"
?47Hibernate的一对一联系关系实例<转&gt????????not-null="true"
?48Hibernate的一对一联系关系实例<转&gt????????length="64"
?49Hibernate的一对一联系关系实例<转&gt????>
?50Hibernate的一对一联系关系实例<转&gt????????<meta?attribute="field-description">
?51Hibernate的一对一联系关系实例<转&gt???????????@hibernate.property
?52Hibernate的一对一联系关系实例<转&gt????????????column="Account"
?53Hibernate的一对一联系关系实例<转&gt????????????length="64"
?54Hibernate的一对一联系关系实例<转&gt????????????not-null="true"
?55Hibernate的一对一联系关系实例<转&gt????????</meta>????
?56Hibernate的一对一联系关系实例<转&gt????</property>
?57Hibernate的一对一联系关系实例<转&gt????<property
?58Hibernate的一对一联系关系实例<转&gt????????name="password"
?59Hibernate的一对一联系关系实例<转&gt????????type="java.lang.String"
?60Hibernate的一对一联系关系实例<转&gt????????column="Password"
?61Hibernate的一对一联系关系实例<转&gt????????not-null="true"
?62Hibernate的一对一联系关系实例<转&gt????????length="16"
?63Hibernate的一对一联系关系实例<转&gt????>
?64Hibernate的一对一联系关系实例<转&gt????????<meta?attribute="field-description">
?65Hibernate的一对一联系关系实例<转&gt???????????@hibernate.property
?66Hibernate的一对一联系关系实例<转&gt????????????column="Password"
?67Hibernate的一对一联系关系实例<转&gt????????????length="16"
?68Hibernate的一对一联系关系实例<转&gt????????????not-null="true"
?69Hibernate的一对一联系关系实例<转&gt????????</meta>????
?70Hibernate的一对一联系关系实例<转&gt????</property>
?71Hibernate的一对一联系关系实例<转&gt????<property
?72Hibernate的一对一联系关系实例<转&gt????????name="email"
?73Hibernate的一对一联系关系实例<转&gt????????type="java.lang.String"
?74Hibernate的一对一联系关系实例<转&gt????????column="Email"
?75Hibernate的一对一联系关系实例<转&gt????????not-null="true"
?76Hibernate的一对一联系关系实例<转&gt????????length="128"
?77Hibernate的一对一联系关系实例<转&gt????>
?78Hibernate的一对一联系关系实例<转&gt????????<meta?attribute="field-description">
?79Hibernate的一对一联系关系实例<转&gt???????????@hibernate.property
?80Hibernate的一对一联系关系实例<转&gt????????????column="Email"
?81Hibernate的一对一联系关系实例<转&gt????????????length="128"
?82Hibernate的一对一联系关系实例<转&gt????????????not-null="true"
?83Hibernate的一对一联系关系实例<转&gt????????</meta>????
?84Hibernate的一对一联系关系实例<转&gt????</property>
?85Hibernate的一对一联系关系实例<转&gt
?86Hibernate的一对一联系关系实例<转&gt????<!--?Associations?-->
?87Hibernate的一对一联系关系实例<转&gt??
?88Hibernate的一对一联系关系实例<转&gt????<!--?bi-directional?one-to-one?association?to?UserInfo?-->
?89Hibernate的一对一联系关系实例<转&gt????<one-to-one
?90Hibernate的一对一联系关系实例<转&gt????????name="userInfo"
?91Hibernate的一对一联系关系实例<转&gt????????class="com.xxx.hibernate.UserInfo"
?92Hibernate的一对一联系关系实例<转&gt????????cascade="save-update"
?93Hibernate的一对一联系关系实例<转&gt????>
?94Hibernate的一对一联系关系实例<转&gt????????<meta?attribute="field-description">
?95Hibernate的一对一联系关系实例<转&gt???????????@hibernate.one-to-one
?96???????????????alt="Hibernate的一对一联系关系实例<转&gt" style="max-width: 100%;height: auto;width: auto\9;" src="//img.reader8.net/uploadfile/jiaocheng/20140188/3040/201401301440589455.gif">????????????cascade="save-update"
?98Hibernate的一对一联系关系实例<转&gt????????</meta>
?99Hibernate的一对一联系关系实例<转&gt????</one-to-one>
100Hibernate的一对一联系关系实例<转&gt
101Hibernate的一对一联系关系实例<转&gt</class>
102Hibernate的一对一联系关系实例<转&gt</hibernate-mapping>
??????由于在建立外键的时候就声明了ON DELETE CASCADE,所以在xml的配置文件中第97行声明为save-update。如果声明为all,那么在删除UserBasic表的数据时,会无谓的多出一条删除UserInfo的delete语句出来。
??????UserInfo.hbm.xml文件的内容如下:

?1Hibernate的一对一联系关系实例<转&gt<?xml?version="1.0"?>
?2Hibernate的一对一联系关系实例<转&gt<!DOCTYPE?hibernate-mapping?PUBLIC
?3Hibernate的一对一联系关系实例<转&gt????"-//Hibernate/Hibernate?Mapping?DTD?2.0//EN"
?4Hibernate的一对一联系关系实例<转&gt????"http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd"?>
?5Hibernate的一对一联系关系实例<转&gt????
?6Hibernate的一对一联系关系实例<转&gt<hibernate-mapping>
?7Hibernate的一对一联系关系实例<转&gt<!--?
?8Hibernate的一对一联系关系实例<转&gt????Created?by?the?Middlegen?Hibernate?plugin?2.1
?9Hibernate的一对一联系关系实例<转&gt
10Hibernate的一对一联系关系实例<转&gt????http://boss.bekk.no/boss/middlegen/
11Hibernate的一对一联系关系实例<转&gt????http://www.hibernate.org/
12Hibernate的一对一联系关系实例<转&gt-->
13Hibernate的一对一联系关系实例<转&gt
14Hibernate的一对一联系关系实例<转&gt<class?
15Hibernate的一对一联系关系实例<转&gt????name="com.xxx.hibernate.UserInfo"?
16Hibernate的一对一联系关系实例<转&gt????table="UserInfo"
17Hibernate的一对一联系关系实例<转&gt????dynamic-update="true"
18Hibernate的一对一联系关系实例<转&gt????dynamic-insert="true"
19Hibernate的一对一联系关系实例<转&gt>
20Hibernate的一对一联系关系实例<转&gt????<meta?attribute="class-description"?inherit="false">
21Hibernate的一对一联系关系实例<转&gt???????@hibernate.class
22Hibernate的一对一联系关系实例<转&gt????????table="UserInfo"
23Hibernate的一对一联系关系实例<转&gt????????dynamic-update="true"
24Hibernate的一对一联系关系实例<转&gt????????dynamic-insert="true"
25Hibernate的一对一联系关系实例<转&gt????</meta>
26Hibernate的一对一联系关系实例<转&gt
27Hibernate的一对一联系关系实例<转&gt????<id
28Hibernate的一对一联系关系实例<转&gt????????name="guid"
29Hibernate的一对一联系关系实例<转&gt????????type="int"
30Hibernate的一对一联系关系实例<转&gt????????column="Guid"
31Hibernate的一对一联系关系实例<转&gt????>
32Hibernate的一对一联系关系实例<转&gt????????<meta?attribute="field-description">
33Hibernate的一对一联系关系实例<转&gt???????

读书人网 >软件架构设计

热点推荐