频道直达 - 专题 - 新闻 - 技巧 - 组网 - 开发 - 安全 - web编程 - 图像 - 操作系统 - 数据库 - 教育 - 旅游 - 健康 - 时尚 - 驱动 - 软件 - 游戏 - 多媒体 - ERP - 讨论组

Java持久化API(JPA)开发中如何使用实体

来源: 作者:IT168 胡磊 出处:巧巧读书 2007-11-11 进入讨论组
上一页 1 2 3 4 5 下一页 

三、实体之间的关系
就像现实世界中一样,你的持久化对象不是单独存在的。实体类通常会和其它的类交互,要么为它的类提供服务或者使用其它类的服务。类和其它的类可以是一对一的,一对多的,多对一的,或者多对多的关系。
你能在本文的棒球运动员和棒球队例子中,找到这些关系。
举个例子,一个 Player又有一个击球率。击球率和该运动员就是一对一的关系。一个 Player有一个击球率。这个击球率只属于某一个 Player。
一个Team有许多的 Player。虽然个别的 Player只属于一个单独的Team,一个Team包括许多的 Player。Team类和Player类之间的俄关系就是一对多的关系。一个Team有许多的 Player。另外一个类似的例子就是多对一的关系。多对一的关系通常是将一对多的关系反过来看。举个例子,如果你你从一个 Player的角度考虑他和Team之间的关系,我们很清楚的说 Player 和 Team是多对一的关系。

Java持久化API(JPA)开发中如何使用实体(图一)

图一:多个球员对一个球队的关系

一个Team在每一个赛季打了很多的比赛,同时每个比赛有很多的Team来参加。从关系数据库的角度来说,Team和比赛就是多对多的关系。
通过持久化API,你可以模拟这些实体的关系。如果每次你的实体对象有这些关系的时候,你就可以在相关的实体中应用其中的一种声明:
1. OneToOne
2.  OneToMany
3.  ManyToOne
       4.  ManyToMany
数据库关系可以是单方向的,意思说只有一个实体知道与其它实体之间的关系。单向的关系就存在“主”方,“主”方保留数据库中的关系信息。
双向关系同时有”主”方和”反”方。“主”方决定如何,什么时候来更新实体间的关系。同时,”主”方中也包含了相对其它实体来说的外键。
回到棒球的例子, Player对象和Team对象有多对一的关系。虽然现在显示的世界中来说不合理,但是在数据库中, Player确是关系的决定者。在 Player类中将 team属性增加为 ManyToOne声明,就完成了 Player 和 Team实体间多对一的关系,代码如下:

@Entity public class Player implements Serializable { ... private Team team; @ManyToOne public Team getTeam() { return team; } ... }
既然 Team 和 Player 类存在一个双向的关系,那么你必须也要在“反”方定义这个关系,与“正”方相对应。从 Team这个类的角度出发,它们之间的关系是一对多的。另外, Player实例通过 其team变量来访问 Team实例。在一对多的关系中使用 mappedBy映射属性,持久化引擎会知道如何匹配players和 teams。在双向关系中, mappedBy映射属性存在于”反”方,即使Team实体。在这个例子中, mappedBy映射属性显示了一个 Player事例的 team属性映射到一个 Team事例。映射 Player对象的 team属性就是意味着 Team对象的标识号将在 PLAYER表中作为一个外键,单独成为一列。
Team实体类将会立即在下面显示。注意getPlayers方法,被 OneToMany声明,并且是 mappedBy属性。

@Entity public class Team implements Serializable { private Long id; private String teamName; private String division; private Collection<Player> players; /** Creates a new instance of Team */ public Team() { players = new HashSet(); } /** * Gets the id of this Team. * @return the id */ @Id @GeneratedValue public Long getId() { return this.id; } /** * Sets the id of this Team to the specified value. * @param id the new id */ public void setId(Long id) { this.id = id; } @OneToMany(mappedBy = "team") public Collection<Player> getPlayers() { return players; } public void setPlayers(Collection<Player> players) { this.players = players; } ... }

http://www.qqread.com/java/2007/11/w381044.html 更多文章 更多内容请看Java环境安装配置Java编程开发手册Wlan组网----家庭专题专题,或进入讨论组讨论。
上一页 1 2 3 4 5 下一页 
收藏此文】【 】【打印】【关闭
相关图文阅读
频道图文推荐
健 康 咨 询
时 尚 咨 询
巧巧读书宗旨
相关专题
讨论组问题推荐
站内各频道最新更新文档
站内最新制作专题
热门关键字导读
Photoshop教 程照片处理 照片制作 PS快捷键 抠图
计 算 机 故 障XP系统修复
艺 术 与 设 计设计 流媒体 设计欣赏 边框
计 算 机 安 全ARP
站内频道文章精选
巧巧电脑频道编辑信箱  告诉我们您想看的专题或文章