EJB3映射?谁拥有OR映射?

Ken*_*ncy 3 java orm jpa

各位大家好,我想知道:我什么时候可以使用映射来指示哪个是由于一对一或一对多的关系 - 或多对多关系映射与EJB3(JPA)示例我有两个表A和B表A属于表B所以我所映射的是哪个表?

Pas*_*ent 6

什么时候我可以使用映射来指示哪个是由于一对一或一对多的关系 - 或与EJB3的多对多关系映射

关系可以是单向的或双向的.在双向关系中,您必须使用该元素在另一个类中指定关系的拥有方mappedBy.

  • 所属侧负责传播的关系的数据库的更新.通常这是外键的一面.
  • 侧映射到拥有方.

从JPA 1.0规范:

2.1.7实体关系......

关系可以是双向的或单向的.双向关系具有拥有方和反方.单向关系只有一个拥有方.关系的拥有方确定数据库中关系的更新,如3.2.3节所述.

以下规则适用于双向关系:

  • 的双向关系中的反向端必须通过使用的是指其持有端mappedBy的的元素OneToOne,OneToManyManyToMany注释.的 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未使用,则持久性提供程序将假定存在两个独立关系:

2个单向关系

这通常不是您想要的,可能最终会出现意外行为(例如,插入多对多的重复行).

相关问题

参考

  • JPA 1.0规范
    • 第2.1.7节"实体关系"