首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

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

2012-10-06 
Hibernate的一对一关联实例转Hibernate的一对一关联实例Hibernate中的表的关联有一对一,一对多和多对多

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

Hibernate的一对一关联实例

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

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

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

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

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

热点排行