Hibernate 映射关系 ---One2One 主键关联

来源:互联网 发布:购买力平价理论 知乎 编辑:程序博客网 时间:2024/04/29 13:59

1.One2One 主键单向关联

两个实体id保持相同,可避免多余字段创建


维护方 主键 采用foreign 生成器,并且使用one-to-one 标签

constrained只能在one-to-one的映射中使用,(一般在主表的映射中,有外键的那个表)。如果constrained=true, 则表明存在外键与关联表对应,并且关联表中肯定存在对应的键与其对应, 另外该选项最关键的是影响save和delete的先后顺序。例如增加的时候,如果constainted=true,则会先增加关联表,然后增加本表。 删除的时候反之。

one-to-one的单向关联中,如果constrained=false,则会在查询时就全部取出来,用left outer join的方式。如果constrained=true,hibernate即会延迟加载sql,只把主表的查出来,等有用到关联表的再发sql取。

维护方 配置

<classname="Person"table="t_person">

<idname="id"column="id"type="java.lang.Integer">

<generatorclass="foreign">

<paramname="property">idcard</param>

</generator>

</id>

<propertyname="name"column="name"type="java.lang.String"></property>

<!--  constrained 表明当前主键作为外键与t_idCard关联表对应  -->

<one-to-onename="idcard"   constrained="true"></one-to-one>

</class>


非维护方配置

<classname="IdCard"table="t_idCard">

<idname="id"column="id"type="java.lang.Integer">

<generatorclass="native"></generator>

</id>

<propertyname="idCardNo"type="java.lang.String"></property>

</class>


2.One2One 主键双向关联

主键双向关联和单向配置差不多,主要区别是在非维护方增加one-to-one 标签就行。

维护方 配置

<classname="Person"table="t_person">

<idname="id"column="id"type="java.lang.Integer">

<generatorclass="foreign">

<paramname="property">idcard</param>

</generator>

</id>

<propertyname="name"column="name"type="java.lang.String"></property>

<!--  constrained 表明当前主键作为外键与t_idCard关联表对应  -->

<one-to-onename="idcard"   constrained="true"></one-to-one>

</class>


非维护方配置

<classname="IdCard"table="t_idCard">

<idname="id"column="id"type="java.lang.Integer">

<generatorclass="native"></generator>

</id>

<propertyname="idCardNo"type="java.lang.String"></property>

<one-to-onename="person"  ></one-to-one>

</class>




0 0
原创粉丝点击