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

Hibernate 关系投射 多对一 一对一 一对多 单双向

2012-11-03 
Hibernate 关系映射 多对一 一对一 一对多 单双向###1 many-to-one namegroup columngroupid /man

Hibernate 关系映射 多对一 一对一 一对多 单双向
###1 <many-to-one name="group" column="groupid" />
many-to-one标签 会在多的一端加一个外键指向一的一端 name和属性名一致 column 是数据库字段名 指向一端的主键
cascade="all" delete update ... 采用cascade会级联操作主表User所引用的Group对象

###2<one-to-one>主键关联 默认了cascade属性 (双向 要互相持对方引用)
IdCard
<id name="id">
<generator constrained="true"/> //constrained表示 当前的主键上存在一个约束(Person的主键做为外键参照了idCard)

one-to-one 标签含义,指示Hibernate如何加载其引用对象 默认以主键加载(当前类的主键到idCard中的主键找对应的)

###3<one-to-one>唯一外键关联
IdCard
<id name="id">
<generator property-ref="idCard"/>
//批示Hibernate如何加载其引用对象,默认以person的主键加载,这里要以person的idCard对应的键进行加载

Person
<id name="id">
<generator unique="true"/> //多的一端加unique "多"的一端 就唯一了

###4 <one-to-many>
一对多关联 在多的一端加一个外键指向一的一端 维护的是 一到多 的关系 (与多对一关联一至,只是角度不同)

Classes
<id name="id">
<generator inverse="true" cascade="all"> //加cascade则在存classes时会级联存student;inverse主要用在一对多和多对多关联上
-->
<set name="students" inverse="true"> //在多的一端(student的一端)加一个外键 inverse 关系反转,表明关系靠对端("多"端)
// 即 存class时不会保存它的set中的students 而存student时 会保存它的classes对象 存class时 它不知道有 studens(关系反转了)
<key column="classesid"/>     //在多一端 加一个外键,指向它自身(这里指Classes)
<one-to-many column="classesid"/> //classesid 与 "一"端指定的字段一致 要与一对多中 key 指定的名字一致

###5<many-to-many>
多对多关联映身 通过中间表维护

User //单向时User映身写法
<id name="id">
<generator table="t_user_role" order-by="userid"> //table 创建第三方表 set无序 order-by 可以排序
<key column="roleid"/> //column 含意是 在多的一端添加一个外键指向自身(在表中加一个字段,引用Role表的主键)
<many-to-many column="userid"/>
</set>

User //双向时User映身写法
<id name="id">
<generator table="t_user_role"> //table 要与另一端定义中间表名字一致
<key column="userid"/>
<many-to-many column="roleid"/>
</set>

热点排行