代码之家  ›  专栏  ›  技术社区  ›  Baba

带复合键的单亲家庭

  •  1
  • Baba  · 技术社区  · 6 年前

    用户有2个组合键

    class TireId {
     private String uId;
     private String schoolId
    }
    

    用户实体:

    @IdClass(UserId.class)
    @Entity
    Class User {
    
     @Id
     private String uId;
     @Id
     private String schoolId
    
        @OneToMany(mappedBy="user")
        private List<Bottom> bottoms;
    
    
    }
    

    下装:

    class BottomId {
       private String bId;
       private String cId;
       private String schoolId;
    
    }
    

    底层:

    @IdClass(BottomId.class) 
    @Entity
    class Bottom {
        private String bId;
       private String cId;
       private String schoolId;
        @ManyToOne
       private  User user;
    }
    

    在上述情况下,hibernate将在下表名user-uId和user-schoolId中创建另外两列。

    但我需要一个有以下关系的用户

    schoolId of user == schoolId of Bottom
    and uId of user == cId of of Bottom
    

    1 回复  |  直到 6 年前
        1
  •  0
  •   Brian Vosburgh    6 年前

    这是一个“衍生身份”,所以 BottomId 应该是这样的:

    class BottomId {
        private String bId;
        private UserId user; // matches name of attribute and type of User PK
    }
    

    Bottom

    @IdClass(BottomId.class) 
    @Entity
    class Bottom {
        @Id
        private String bId;
    
        @Id
        @JoinColumns({
            @JoinColumn(name="cId", referencedColumnName="uId"),
            @JoinColumn(name="schoolId", referencedColumnName="schoolId")
        })
        @ManyToOne
        private  User user;
    }
    

    衍生恒等式在第2.4.1节的JPA2.1规范中进行了讨论(附示例)。