Hibernate单向“一对一”关联

1. 基于外键关联的单向“一对一”关联
其中指定many-to-one的unique="true",为单向“一对一”,不指定就是单向“多对一”

<class name="Person">
    <id name="id" column="personId"><generator class="native"/></id>
    <many-to-one name="address" column="addressId" unique="true" class="Address" />
</class>

2. 基于连接表的单向“一对一”关联,是一种很少见的情况,不推荐使用
其中指定many-to-one的unique="true",为单向“一对一”,不指定就是单向“多对一”

<class name="Person">
    <id name="id" column="personId"><generator class="native"/></id>
    <join table="PersonAddress" optional="true">
        <key column="personId" unique="true"/>
        <many-to-one name="address" column="addressId"  unique="true" class="Address" not-null="true"/>
    </join>
</class>

无论使用使用上面哪种方式,关联是单向的,另外一端无需额外配置

<class name="Address">
    <id name="id" column="addressId"><generator class="native"/></id>
</class>

3. 基于主键关联的单向“一对一”关联,不常用,通常使用一个特定的id 生成器并需要转变关联的方向

<class name="Person">
    <id name="id" column="personId"><generator class="native"/></id>
 </class>

<class name="Address">
    <id name="id" column="personId">
        <generator class="foreign">
            <param name="property">person</param>
        </generator>
    </id>
    <one-to-one name="person" constrained="true"/>
</class>

时间: 2024-10-10 22:31:55

Hibernate单向“一对一”关联的相关文章

【Hibernate】——一对一关联映射

两个对象之间如果是一对一的关系,如Person-IdCard.在Hibernate中有两种策略可以实现一对一的关联映射: 主键关联:即让两个对象具有相同的主键值,以表明它们之间的一一对应的关系:数据库表不会有额外的字段来维护它们之间的关系,仅通过表得主键来关联. 唯一外键关联:外键关联,本来是用于多对一的配置,但是如果加上唯一的限制之后,也可以用来表示一对一关联关系: 而每种策略又分为两种方向的对应关系,即单向一对一关系和双向一对一关系.分类的原因一般是由需求决定的,单双向是站在不同的角度去看人

Hibernate中一对一关联映射/组件映射

Hibernate映射:一对一关联 1.按照外键映射 2.按照主键映射 组件映射 下面以员工账号表和员工档案表(员工账号和档案表之间是一对一的关系)为例,介绍这两种映射关系,并使用这两种 映射方式分别完成以下持久化操作 (1)保存员工档案的同时分配给员工一个账号 (2)加载员工档案的同时加载账号信息 一:按照外键映射

注解:【有连接表的】Hibernate单向1-&gt;1关联

Person与Address关联:单向1->1,[有连接表的] (使用较少!) Person.java package org.crazyit.app.domain; import javax.persistence.CascadeType;import javax.persistence.Column;import javax.persistence.Entity;import javax.persistence.GeneratedValue;import javax.persistence.

注解:【基于外键的】Hibernate单向1-&gt;1关联

Person与Address关联:单向1->1,[基于外键的] Person.java package org.crazyit.app.domain; import javax.persistence.CascadeType;import javax.persistence.Column;import javax.persistence.Entity;import javax.persistence.GeneratedValue;import javax.persistence.Generati

注解:【有连接表的】Hibernate单向N-&gt;1关联

Person与Address关联:单向N->1,[有连接表的] Person.java package org.crazyit.app.domain; import javax.persistence.CascadeType;import javax.persistence.Column;import javax.persistence.Entity;import javax.persistence.GeneratedValue;import javax.persistence.Generati

注解:【无连接表的】Hibernate单向N-&gt;1关联

Person与Address关联:单向N->1,[无连接表的] Person.java package org.crazyit.app.domain; import javax.persistence.CascadeType;import javax.persistence.Column;import javax.persistence.Entity;import javax.persistence.GeneratedValue;import javax.persistence.Generati

(十四)Hibernate中的多表操作(4):单向一对一

案例一: 注解方式实现一对一 UserBean.java package bean; import java.io.Serializable; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.JoinColumn; import javax.persistence.OneToOne; import java

006——hibernate一对一关联映射

一对一关联映射有两种方式:主键关联和外键关联 以夫妻为例(Husband----Wife) 单向关联实体类: Husband.java package com.java.hibernate; public class Husband { private int id; private String name; private Wife wife; public Wife getWife() { return wife; } public void setWife(Wife wife) { thi

【SSH进阶之路】Hibernate映射——一对一双向关联映射(六)

上篇博文[SSH进阶之路]Hibernate映射--一对一单向关联映射(五),我们介绍了一对一的单向关联映射,单向是指只能从人(Person)这端加载身份证端(IdCard),但是反过来,不能从身份证端加载人得信息.如图所示: 关键原因在于对象模型具有方向性: 单向:一端只能加载另一端,不能反过来. 双向:两端都可以加载另一端. 问题来了:如何我们想从身份证端(IdCard)加载人(Person),怎么办呢? 下面我们开始介绍一对一的双向关联映射. 映射原理 双向关联映射与单向关联映射的原理是一