来自sun官方的J2EE的tutorial:http://java.sun.com/javaee/5/docs/tutorial/doc/bnbsw.html
程序中的实体:Play, Team, League. (球员、球队、联赛)
实体关系:
- 一个Play可以在多个Team中
- 一个Team可以有多个Play
- 一个Team对应一个League,不多也不能少
- 一个League当然有多个Team
总之:Play和Team是Many-Many的关系, Team和League是Many-One的关系。
Many-Many的注解:(在Team实体中)
@ManyToMany @JoinTable( name="EJB_ROSTER_TEAM_PLAYER", joinColumns= @JoinColumn(name="TEAM_ID", referencedColumnName="ID"), inverseJoinColumns= @JoinColumn(name="PLAYER_ID", referencedColumnName="ID") ) public Collection<Player> getPlayers() { return players; }
@JoinTable用于将Play的ID和Team的ID关联起来,并标明Team是这种关系的维护者。程序部署的时候,容器会自动创建一个关联表:EJB_ROSTER_TEAM_PLAYER.
Play是反向关联端(inverseJoin),或者说非关系持有端,该实体类中需要用mappedBy元素来指明关系。
因为Play和Team的关系是双向的,因此由哪一方来维护关系是任意的。
@ManyToMany(mappedBy="players") public Collection<Team> getTeams() { return teams; }
Order程序是一个简单的存货、订购系统。程序的实体包括parts, vendors, orders, line items.