`
gdf84
  • 浏览: 61571 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

Hibernate关系映射

阅读更多

现实生活中有很多1对多(多对1)的关系模型。比如,一个人可以有0到多套房子,0到多辆汽车;一个父亲有0到多个孩子等等。这种关系被称作1对多关系。反过来,房子与人,汽车与人的关系,以及孩子与父亲的关系就是多对一的关系。这里需要注意一点的是,多对一关系的一个前提是:一套确定的房子只能属于某个确定的人(不能属于多人);一个确定的孩子也只能属于某个确定的父亲。

下面我们就拿最简单的父亲和孩子的关系来说明1对多(多对1)模型在Hibernate中的映射。

关系模型:父亲 vs 孩子(Father vs  Son)。
Hibernate中对应的关系映射:one-to-many

反过来,

关系模型:孩子 vs 父亲(Son vs Father)。
Hibernate中对应的关系映射:many-to-one


很多初学者往往有这样的疑问,我什么时候需要定义映射关系呢?
答案很简单:按需求来确定。就是说你需要哪种关系的时候就定义哪种映射,不需要的时候就可以不定义它们的关系映射了。还是以上面的例子来说明。
如果你需要在取得孩子(Son)的时候,同时需要知道该孩子的父亲(Father)是谁,你就可以在孩子的映射定义文件Son.hbm.xml里定义孩子跟父亲的关系映射:many-to-one。
同样,如果需要知道某父亲的所有孩子,就可以在父亲的映射定义文件Father.hbm.xml里定义父亲跟孩子的关系映射:one-to-many。

回到正题,怎么定义呢?下面我们列出代码:

TABLE-CREATE SQL:

#
# father TABLE
#
CREATE TABLE FATHER (
ID CHAR(32) NOT NULL,
NAME CHAR(32) NOT NULL,
PRIMARY KEY(id)
)

#
# SON TABLE
#
CREATE TABLE SON (
ID CHAR(32) NOT NULL,
NAME CHAR(32) NOT NULL,
FATHER_ID CHAR(32) NOT NULL,
PRIMARY KEY(id)
)
# ALTER TABLE SON ADD FOREIGN KEY FATHER_ID REFERENCE FATHER(ID);
Hibernate代码:
Father.hbm.xml
--
        <!-- FAHTER vs SON -->
        <set name="sonSet" lazy="true" inverse="true">
            <key>
                <column name="FATHER_ID" not-null="true" />
            </key>
            <one-to-many class="com.yourcompany.entity.Son" />
        </set>

Father.java
--
    /** sonSet: association with set */
    private java.util.Set sonSet;
    …

    /**
     * set sonSet
     * @param sonSet association with set
     */

    public void setSonSet(java.util.Set sonSet) {
        this.sonSet = sonSet;
    }
    
    /**
     * get sonSet
     * @return sonSet
     */

    public java.util.Set getSonSet() {
        return sonSet;
    }

Son.hbm.xml
        <!-- SON vs FATHER -->
        <many-to-one
            column="FATHER_ID"
            name="father"
            class="com.yourcompany.entity.Father"
            not-null="true"
            cascade="none" />

Son.java
    /** father: many-to-one association */
    private com.yourcompany.entity.Father father;
    …
    /**
     * set father
     * @param father many-to-one association
     */

    public void setFather(com.yourcompany.entity.Father father) {
        this.father = father;
    }
    
    /**
     * get father
     * @return father
     */

    public com.yourcompany.entity.Father getFather() {
        return father;
    }

分享到:
评论

相关推荐

    hibernate关系映射

    以下是关于“Hibernate关系映射”的详细解释。 1. 一对一关系映射: Hibernate支持一对一(One-to-One)关系映射,这种关系通常存在于具有唯一性的关联表中。通过在实体类中使用`@OneToOne`注解,我们可以定义一对...

    hibernate关系映射多对多关系

    综上所述,这个压缩包提供了关于Hibernate关系映射的全面教程,包括多对多、一对一和一对多的关系配置,以及如何在Spring+Hibernate+Struts环境中应用这些关系。对于想要深入理解Hibernate并提升开发效率的Java...

    Hibernate对象关系映射

    Hibernate对象关系映射一对多 很基础等文档

    hibernate关系映射.doc

    hibernate关系映射,1V1,1vN,nVn,单相双相

    hibernate关系映射1to1及Nto1

    hibernate关系映射系列1,单向1对1映射,意向Nto1 程序说明:生成mysql数据库,建立DB Browser连接后,用户可在程序中自动生成mysql表,非常简单,适合初学者了解hibernate映射机制,有问题可联系flyallen5@hotmail.com

    Hibernate关系映射XML生成工具

    Hibernate是一款强大的对象关系映射(ORM)框架,它允许开发者用Java对象来操作数据库,而无需直接编写SQL语句。关系映射XML生成工具,如"Middlegen-Hibernate-r5",则是为了简化这一过程而设计的。这些工具能够自动...

    hibernate的关系映射

    **二、Hibernate关系映射的类型** 1. **一对一(OneToOne)**: 表示一个实体对应另一个实体的唯一实例。这可以通过在两个类中都定义`@OneToOne`注解来实现,并通过`mappedBy`属性指定被引用的一方。 2. **一对多...

    Hibernate_关联关系映射配置详解

    Hibernate_关联关系映射配置详解,希望能帮助广大java爱好者

    Hibernate的关联关系映射图解

    Hibernate4中映射关系图解。

    hibernate关系映射配置.rar

    &lt;hibernate-mapping&gt; &lt;class name="com.bjsxt.hibernate.User" table="t_user"&gt; &lt;!-- --&gt; &lt;/hibernate-mapping&gt; &lt;hibernate-mapping&gt; &lt;class name="com.bjsxt.hibernate.Group" ...

    hibernate关联映射详解

    hibernate,hibernate,hibernate,hibernate,hibernate,hibernate,hibernate,hibernate,hibernate,hibernate,hibernate,hibernate,hibernate,hibernate,包含4个说明文档,分别详细解说了hibernate关联映射的关联关系,...

    hibernate关系映射.chm

    现在我也正在学hibernate,于是我认为这东西对你也有用吧

Global site tag (gtag.js) - Google Analytics