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">