各位大家好,我想知道:我什么时候可以使用映射来指示哪个是由于一对一或一对多的关系 - 或多对多关系映射与EJB3(JPA)示例我有两个表A和B表A属于表B所以我所映射的是哪个表?
什么时候我可以使用映射来指示哪个是由于一对一或一对多的关系 - 或与EJB3的多对多关系映射
关系可以是单向的或双向的.在双向关系中,您必须使用该元素在另一个类中指定关系的拥有方mappedBy.
从JPA 1.0规范:
2.1.7实体关系......
关系可以是双向的或单向的.双向关系具有拥有方和反方.单向关系只有一个拥有方.关系的拥有方确定数据库中关系的更新,如3.2.3节所述.
以下规则适用于双向关系:
- 的双向关系中的反向端必须通过使用的是指其持有端
mappedBy的的元素OneToOne,OneToMany或ManyToMany注释.的mappedBy元件指定在作为关系的所有者该实体的属性或字段.- 一对多/多对一双向关系的许多方面必须是拥有方,因此
mappedBy无法在ManyToOne注释上指定元素.- 对于一对一的双向关系,拥有方对应于包含相应外键的一侧.
- 对于多对多双向关系,任何一方都可能是拥有方.
想象一下以下模型:
@Entity
public class Player {
...
private Team team;
@ManyToOne
public Team getTeam() { return team; }
...
}
Run Code Online (Sandbox Code Playgroud)
和
@Entity
public class Team {
...
private Set<Player> players = new HashSet<Player();
public Team() { }
@OneToMany(mappedBy = "team")
public Set<Player> getPlayers() { return players; }
...
}
Run Code Online (Sandbox Code Playgroud)
在此示例中,该mappedBy属性显示Player实例的team属性映射到Team实例,Team对象的标识符将作为PLAYER表中的外键列存在.Player关系的拥有方负责存储外键.
如果mappedBy未使用,则持久性提供程序将假定存在两个独立关系:
这通常不是您想要的,可能最终会出现意外行为(例如,插入多对多的重复行).