`
eric.zhang
  • 浏览: 127332 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Hibernate关系映射( 单向关联XML )

阅读更多
多对一关系:
在一的一端配置set
<set name="users">
			<key column="addressid"/>
			<one-to-many class="User"/>
		</set>

name必须,key column必须,one-to-many必须。

在多的一端配置many-to-one:
<many-to-one name="address" class="Address" column="addressid" ></many-to-one>
name,column必须

<property name="age" column="age" type="int"/>

property:当column不写是,默认列名与name相同。type也可省略,由hibernate自动匹配



1:单向 many-to-one 关联是最常见的单向关联关系。
下面是人与地址之间的关联关系映射:一个人对应一个地址,一个地址可能有多个人;
对于单向映,假如从person端去维护关联关系。则只需做如下配置:

表结构:
create table Person ( personId bigint not null primary key, addressId bigint not null )
create table Address ( addressId bigint not null primary key )


person.hbm.xml配置文件
<class name="Person">
    <id name="id" column="personId">
        <generator class="native"/>
    </id>
    <many-to-one name="address" 
        column="addressId"
        not-null="true"/>
</class>

Address.hbm.xml:
<class name="Address">
    <id name="id" column="addressId">
        <generator class="native"/>
    </id>
</class>



2: 一对一(One-to-one)
(1)基于外键关联的单向一对一关联和单向多对一关联几乎是一样的。唯一的不同就是单向一对一关联中的外键字段具有唯一性约束。

create table Person ( personId bigint not null primary key, addressId bigint not null unique )
create table Address ( addressId bigint not null primary key )


Person.hbm.xml:
<class name="Person">
    <id name="id" column="personId">
        <generator class="native"/>
    </id>
    <many-to-one name="address" 
        column="addressId" 
        unique="true"
        not-null="true"/>
</class>


Address.hbm.xml:
<class name="Address">
    <id name="id" column="addressId">
        <generator class="native"/>
    </id>
</class>


(2)基于主键关联的单向一对一关联通常使用一个特定的 id 生成器,然而在这个例子中我们掉换了关联的方向:
create table Person ( personId bigint not null primary key )
create table Address ( personId bigint not null primary key )


person.hbm.xml:
<class name="Person">
    <id name="id" column="personId">
        <generator class="native"/>
    </id>
</class>

address.hbm.xml:
<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>



3:一对多(one-to-many)
基于外键关联的单向一对多关联是一种很少见的情况,我们不推荐使用它。
create table Person ( personId bigint not null primary key )
create table Address ( addressId bigint not null primary key, personId bigint not null )


person.hbm.xml
<class name="Person">
    <id name="id" column="personId">
        <generator class="native"/>
    </id>
    <set name="addresses">
        <key column="personId" 
            not-null="true"/>
        <one-to-many class="Address"/>
    </set>
</class>


address.hbm.xml:
<class name="Address">
    <id name="id" column="addressId">
        <generator class="native"/>
    </id>
</class>


注:通常情况下,一对多建议使用连接表的方式来实现


4:使用连接表的单向关联(Unidirectional associations with join tables)

(1):一对多(one-to-many)
基于连接表的单向一对多关联 应该优先被采用。请注意,通过指定unique="true",我们可以把多样性从多对多改变为一对多。

create table Person ( personId bigint not null primary key )
create table PersonAddress ( personId not null, addressId bigint not null primary key )
create table Address ( addressId bigint not null primary key )


person.hbm.xml:
<class name="Person">
    <id name="id" column="personId">
        <generator class="native"/>
    </id>
    <set name="addresses" table="PersonAddress">
        <key column="personId"/>
        <many-to-many column="addressId"
            unique="true"
            class="Address"/>
    </set>
</class>


address.hbm.xml:
<class name="Address">
    <id name="id" column="addressId">
        <generator class="native"/>
    </id>
</class>


(2)一对一(One-to-one)基于连接表的单向一对一关联也是可行的,但非常少见。

create table Person ( personId bigint not null primary key )
create table PersonAddress ( personId bigint not null primary key, addressId bigint not null unique )
create table Address ( addressId bigint not null primary key )


Person.hbm.xml
<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" 
            not-null="true"
            unique="true"/>
    </join>
</class>


address.hbm.xml
<class name="Address">
    <id name="id" column="addressId">
        <generator class="native"/>
    </id>
</class>


(3):多对多(many-to-many)这里是一个单向多对多关联的例子。
create table Person ( personId bigint not null primary key )
create table PersonAddress ( personId bigint not null, addressId bigint not null, primary key (personId, addressId) )
create table Address ( addressId bigint not null primary key )


<class name="Person">
    <id name="id" column="personId">
        <generator class="native"/>
    </id>
    <set name="addresses" table="PersonAddress">
        <key column="personId"/>
        <many-to-many column="addressId"
            class="Address"/>
    </set>
</class>

<class name="Address">
    <id name="id" column="addressId">
        <generator class="native"/>
    </id>
</class>
分享到:
评论

相关推荐

    hibernate一对多关联映射(单向关联)

    这篇博客文章“hibernate一对多关联映射(单向关联)”将深入讲解如何配置和使用这种映射关系。 在单向关联中,只有一个实体知道另一个实体的存在,也就是说,只有父实体("一"的一端)有对子实体("多"的一端)的...

    Hibernate关联映射-one to one单向外键关联

    本话题主要探讨的是Hibernate中的一种关联映射方式——一对一(One-to-One)单向外键关联。这种关联模式通常用于两个实体之间存在唯一对应的关系,例如一个用户对应一个唯一的账户。 在Hibernate中,一对一关联可以...

    hibernate多对一单向关联关系实现源码

    在Java的持久化框架Hibernate中,多对一(ManyToOne)关联关系是一种常见的对象关系映射(ORM)场景。这种关系通常出现在一个实体类拥有多条与另一个实体类相关的记录,而另一个实体类可能只有一条对应的记录。例如...

    Hibernate教程10_关系映射之多对一单向关联

    本教程主要聚焦于Hibernate中的一个关键概念——关系映射,特别是多对一单向关联的实现。这种关联类型常出现在数据库设计中,比如一个部门可以有多名员工,但一个员工只属于一个部门。 首先,我们要理解多对一关系...

    Hibernate教程04_关系映射之一对一单向外键关联

    **标题详解:**“Hibernate教程04_关系映射之一对一单向外键关联” 在Hibernate框架中,关系映射是数据库表之间的关联在对象模型中的体现。本教程重点讲解了一对一(One-to-One)单向外键关联的实现方法。在数据库...

    Hibernate一对一唯一外键关联映射(单向关联)

    接下来,我们需要在Hibernate的XML映射文件中定义这两个实体的关联关系。在`Person.hbm.xml`文件中: ```xml &lt;!-- Person.hbm.xml --&gt; &lt;hibernate-mapping&gt; &lt;!-- 一对一关联配置 --&gt; &lt;!-- 其他属性映射...

    hibernate单向一对多关联映射(注解版)

    在Java的持久化框架Hibernate中,单向一对多关联映射是常见的数据关系处理方式,尤其是在处理数据库中的实体类和表之间的关系时。本主题主要关注如何使用注解来实现这种映射。Hibernate通过注解使得对象关系映射...

    Hibernate教程11_关系映射之一对多单向关联

    本教程主要探讨的是Hibernate中的一种重要关系映射类型:一对多单向关联。在关系型数据库中,一对多关联是最常见的关系类型,一个实体可以与多个其他实体相关联。在Hibernate中,这种关系可以通过配置XML映射文件或...

    hibernate的关联关系映射

    【hibernate的关联关系映射】在Java持久化框架Hibernate中,关联关系映射是核心功能之一,它允许对象间的复杂关系与数据库中的表结构相匹配。在选课系统这个例子中,主要涉及到的对象包括课题(Course)、教师(Teacher...

    Hibernate一对多单向关联映射

    总结,Hibernate的一对多单向关联映射通过XML映射文件和注解配合,可以方便地管理实体之间的关系。这种方式简化了数据库操作,提高了代码的可读性和可维护性。在实际开发中,应根据业务需求灵活运用,确保数据的一致...

    Hibernate单向一对多关联映射(XML版)

    在本主题"Hibernate单向一对多关联映射(XML版)"中,我们将深入探讨如何使用XML配置来实现数据库中一个实体类对应多个实体类的关联关系。 在Hibernate中,一对多关联是一种常见的关系映射类型,它反映了数据库中的...

    Hibernate单向关联代码示例

    在Java的持久化框架Hibernate中,关联映射是数据库对象之间关系的一种体现,它使得ORM(对象关系映射)更加灵活。"Hibernate单向关联代码示例"是一个实用的学习资源,帮助开发者理解如何在实际项目中实现单向关联。...

    hibernate单向多对多映射(XML版)

    总结起来,Hibernate的单向多对多映射通过XML配置文件定义了实体之间的关系,使得在Java代码中处理数据库的多对多关联变得更加简单和直观。理解和熟练掌握这一映射方式,对于提升Java持久层开发的效率和质量至关重要...

    Hibernate关联关系映射目录

    ### Hibernate关联关系映射 #### 一、单向关联 单向关联指的是对象之间的关联关系只在一个方向上存在,也就是说这种关联关系仅在一个类中表示出来,在另一个类中不体现这种关联。 ##### 1. 一对一外键单向关联 ...

    hibernate主键实现一对一单向关联关系源码

    在Java的持久化框架Hibernate中,一对一(One-to-One)关联关系是常见的一种实体关系映射。本主题将深入探讨如何使用Hibernate通过主键来实现一对一的单向关联关系,并提供相关的源码分析。 首先,我们需要理解一对...

Global site tag (gtag.js) - Google Analytics