Hibernate学习笔记(四)
来源:互联网 发布:mac u盘刻录dmg 编辑:程序博客网 时间:2024/05/18 03:13
六、关联映射
我们已经映射了一个持久化实体类到表上。让我们在这个基础上增加一些类之间的关联。首先我们往应用程序里增加人(people)的概念,并存储他们所参与的一个 Event 列表。
最初简单的 Person
类:
package org.hibernate.tutorial.domain;
public class Person {
private Long id;
private int age;
private String firstname;
private String lastname;
public Person() {}
// Accessor methods for all properties, private setter for 'id'
}
然后,创建新的映射文件 Person.hbm.xml
。
hibernate-mapping package"org.hibernate.tutorial.domain"
class name"Person" table"PERSON"
id name"id" column"PERSON_ID"
generator class"native"
id
property name"age"
property name"firstname"
property name"lastname"
class
hibernate-mapping
最后,把新的映射加入到 Hibernate 的配置中:
mapping resource"events/Event.hbm.xml"
mapping resource"events/Person.hbm.xml"
现在我们在这两个实体之间创建一个关联。显然,persons 可以参与一系列 events,而 events 也有不同的参加者(persons)。我们需要处理的设计问题是关联方向(directionality),阶数(multiplicity)和集合(collection)的行为。
单向 Set-based 的关联
我们将向 Person
类增加一连串的 events。那样,通过调用 aPerson.getEvents()
,就可以轻松地导航到特定 person 所参与的 events,而不用去执行一个显式的查询。我们使用 Java 的集合类(collection):Set
,因为 set 不包含重复的元素及与我们无关的排序。
public class Person {
private Set events = new HashSet();
public Set getEvents() {
return events;
}
public void setEvents(Set events) {
this.events = events;
}
}
在映射这个关联之前,先考虑一下此关联的另外一端。很显然,我们可以保持这个关联是单向的。或者,我们可以在 Event
里创建另外一个集合,如果希望能够双向地导航,如:anEvent.getParticipants()
。从功能的角度来说,这并不是必须的。因为你总可以显式地执行一个查询,以获得某个特定 event 的所有参与者。这是个在设计时需要做出的选择,完全由你来决定,但此讨论中关于关联的阶数是清楚的:即两端都是“多”值的,我们把它叫做多对多(many-to-many)关联。因而,我们使用 Hibernate 的多对多映射:
class name"Person" table"PERSON"
id name"id" column"PERSON_ID"
generator class"native"
id
property name"age"
property name"firstname"
property name"lastname"
set name"events" table"PERSON_EVENT"
key column"PERSON_ID"
many-to-many column"EVENT_ID" class"Event"
set
class
Hibernate 支持各种各样的集合映射,<set>
使用的最为普遍。对于多对多关联(或叫 n:m 实体关系), 需要一个关联表(association table)。
- Hibernate学习笔记(四)
- Hibernate学习笔记(四)
- hibernate学习笔记(四)
- Hibernate学习笔记(四)
- Hibernate学习笔记(四)
- hibernate学习笔记四
- Hibernate学习笔记四
- hibernate学习笔记(四)
- hibernate学习笔记四
- hibernate学习笔记四
- hibernate学习笔记之四(Hibernate中的类型)
- Hibernate学习笔记之四
- [学习]Hibernate 3.2学习笔记之四
- Hibernate学习笔记(四)【操纵对象篇】
- Hibernate学习笔记(四)【操纵对象篇】
- Hibernate学习笔记(四)——HQL
- hibernate3 学习笔记(四) hibernate 介绍(转)
- Hibernate 学习代码/笔记(四)(一对多)
- Hibernate学习笔记(三)
- linux下基于jrtplib库的实时传送实现
- 在Eclipse中用JDBC连接Sql Server 2005总结.doc
- 注册和卸载windows服务进程
- Peacomm-C-Cracking-the-nutshell.html
- Hibernate学习笔记(四)
- 一切都是最好的安排
- 使用命令安装和卸载服务
- 极限挑战—C#+ODP 100万条数据导入Oracle数据库仅用不到1秒
- IPhone短信设置
- 用C#实现的内存映射
- Hibernate学习笔记(五)
- CISCO DHCP 配置
- win32中SetCapture 和 ReleaseCapture的使用