• 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 属性值。

  • 相关阅读:
    leetcode 第41题 Trapping Rain Water
    leetcode第40题--First Missing Positive
    leetcode第39题--Combination Sum II
    leetcode第38题--Combination Sum
    leetcode第37题--Count and Say
    17_7_18 servlet 动态工程 先加载servlet request注意事项
    17_7_13 Servlet分页思路
    17_7_12 tomcat 安装+(java+tomcat)环境变量+windows安装报错:JRE_HOME
    17_7_12 JDBC 中的 DBCP(链接池)和 Servlet Web工程之间的差异
    17_7_12 DBCP 中 ResultSet 判断是否有值 +判断 一个对象是否包含在数据库中
  • 原文地址:https://www.cnblogs.com/winkey4986/p/2575253.html
Copyright © 2020-2023  润新知