hibernate 中的主键一对一


引用:

题记:Hibernate是个好东西,可我感觉这个好东东不好驾御,一个one-to-one就让我花费了很多时间,现在终于有点理解,所以想给大家分享分享我的观点,如有差错,还请各位批评指正!

1.关于one-to-one

持久化对象之间一对一的关联关系是通过one-to-one元素定义:

<one-to-onename="propertyName"(1)class="ClassName"(2)cascade="all|none|save-update|delete"(3)constrained="true|false"(4)outer-join="true|false|auto"(5)property-ref="propertyNameFromAssociatedClass"(6)Access="field|property|ClassName"(7)/>
(1)
name:属性的名字[POJO中的]。

(2)
class(可选-默认是通过反射得到的属性类型):被关联的类的名字。

(3)
cascade(级联)(可选)表明操作是否从父对象级联到被关联的对象。

(4)
constrained(约束)(可选)表明该类对应的表对应的数据库表,和被关联的对象所对应的数据库表之间,通过一个外键引用对主键进行约束。这个选项影响save()和delete()在级联执行时的先后顺序(也在schemaexporttool中被使用)。

(5)
outer-join(外连接)(可选-默认为自动):当设置hibernate.use_outer_join的时候,对这个关联允许外连接抓取。

(6)
property-ref:(可选)指定关联类的一个属性,这个属性将会和本外键相对应。如果没有指定,会使用对方关联类的主键[POJO中POJO类的实例]。

(7)
access(可选-默认是property):Hibernate用来访问属性的策略。

2.one-to-one分类

主键关联

惟一外键关联

主键关联不需要额外的表字段;两行是通过这种一对一关系相关联的,那么这两行就共享同样的主关键字值。所以如果你希望两个对象通过主键一对一关联,你必须确认它们被赋予同样的标识值!

另一种方式是一个外键和一个惟一关键字对应。

3.one-to-one中惟一外键关联操作

(1)数据库DDL

#
#Tablestructurefortable'author'
#

CREATETABLEauthor(
author_idchar(20)NOTNULLdefault'',
person_idchar(20)defaultNULL,
PRIMARYKEY (author_id)
)ENGINE=InnoDBDEFAULTCHARSET=gb2312;

#
#Tablestructurefortable'person'
#

CREATETABLEperson(
person_idchar(20)NOTNULLdefault'',
namechar(20)defaultNULL,
PRIMARYKEY (person_id)
)ENGINE=InnoDBDEFAULTCHARSET=gb2312;

(2)映射文件

Author.hbm.XML

<?xmlversion="1.0"?>
<!DOCTYPEhibernate-mappingPUBLIC
"-//Hibernate/HibernateMappingDTD2.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">

<!--DONOTEDIT:Thisisageneratedfilethatissynchronized-->
<!--byMyEclipseHibernatetoolintegration. -->
<!--CreatedSatApr2314:28:37CST2005 -->
<hibernate-mappingpackage="po">

<classname="Author"table="author">


猜你喜欢

转载自zjfgf.iteye.com/blog/1533658