Hibernate注解配置1:1关联

一对一

使用 @OneToOne 注解可以建立实体Bean之间的一对一关系。一对一关系有3种情况。

• 关联的实体都共享同样的主键。

@Entity

public class Body {

  @Id

  public Long getId() { return id; }

  @OneToOne(cascade = CascadeType.ALL)

  @PrimaryKeyJoinColumn

  public Heart getHeart() {

     return heart;

  }

  ...

}

@Entity

public class Heart {

  @Id

  public Long getId() { ...}

}

通过@PrimaryKeyJoinColumn 注解定义了一对一的关联关系。

• 其中一个实体通过外键关联到另一个实体的主键。注:一对一,则外键必须为唯一约束。

@Entity

public class Customer implements Serializable {

   @OneToOne(cascade = CascadeType.ALL)

   @JoinColumn(name="passport_fk")

   public Passport getPassport() {

   ...

}

@Entity

public class Passport implements Serializable {

   @OneToOne(mappedBy = "passport")

   public Customer getOwner() {

   ...

}

通过@JoinColumn注解定义一对一的关联关系。如果没有@JoinColumn注解,则系统自动处理,在主表中将创建连接列,列名为:主题的关联属性名 + 下划线 + 被关联端的主键列名。上例为 passport_id, 因为Customer 中关联属性为 passport, Passport 的主键为 id.

• 通过关联表来保存两个实体之间的关联关系。注:一对一,则关联表每个外键都必须是唯一约束。

@Entity

public class Customer implements Serializable {

   @OneToOne(cascade = CascadeType.ALL)

   @JoinTable(name = "CustomerPassports",

        joinColumns = @JoinColumn(name="customer_fk"),

        inverseJoinColumns = @JoinColumn(name="passport_fk")

   )

   public Passport getPassport() {

   ...

}

@Entity public class Passport implements Serializable {

   @OneToOne(mappedBy = "passport")

   public Customer getOwner() {

   ...

}

Customer 通过 CustomerPassports 关联表和 Passport 关联。该关联表通过 passport_fk 外键指向 Passport 表,该信心定义为 inverseJoinColumns 的属性值。 通过 customer_fk 外键指向 Customer 表,该信息定义为 joinColumns 属性值。

你可能感兴趣的:(Hibernate)