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

Hibernate中one-to-one学习笔记

2012-09-19 
Hibernate中one-to-one学习札记1.关于one-to-one??? ?持久化对象之间一对一的关联关系是通过one-to-one元

Hibernate中one-to-one学习札记

1.关于one-to-one

?

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

?

<one-to-one

?? ? ? ?name="propertyName" ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?(1)

?? ? ? ?? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?(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()在级联执行时的先后顺序(也在schema export tool中被使用)。

?

(5)

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

?

(6)

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

?

(7)

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

?

2.one-to-one分类

?

主键关联

?

惟一外键关联

?

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

?

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

?

?

深入探讨

?????a.由于主键采用assigned方式,必须自己指定ID;

??? b.如果只采用session.save(author);将会产生级联错误[ Could not synchronize database state with session???????????? net.sf.hibernate.HibernateException: Batch update row count wrong: 0],看看执行的SQL语句[Hibernate: insert into author (person_id, author_id) values (?, ?)?? Hibernate: update person set name=? where person_id=?]很明白是吧,因为person表还是空的,当然执行update操作会失败!虽然解决的方法很简单,可问题值得思考!虽然对person进行了setter方法,可不要忘了他仍旧是VO而不是PO!

热点排行