您的位置:首页 > 其它

Hibernate 关系映射

2010-03-26 14:46 302 查看
现实生活中有很多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;

}

另一个比较详细的讲解: http://lavasoft.blog.51cto.com/62575/39398
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: