【问题标题】:Foreign key Mapping JPA外键映射 JPA
【发布时间】:2021-07-01 02:42:33
【问题描述】:

我有一个父子实体,如下所述。 (deviceId,dateTime) 元组是子表中的复合外键,这两个属性都是父表中复合主键的一部分。如何在 JPA 中进行映射?

public class Child {
     private class ChildPk implements Serializable {
        private static final long serialVersionUID = 1L;
        private String deviceId;
        private String dateTime;
        private int index;
        //Getters and setters
    }
    @EmbeddedId
    @AttributeOverrides(value = {
            @AttributeOverride(name = "deviceId", column = @Column(name = "DeviceId")),
            @AttributeOverride(name = "dateTime", column = @Column(name = "BillingDateTime")),
            @AttributeOverride(name = "index", column = @Column(name = "TierIndex"))
    })
    private ChildPk pK;
    //getters and setters
}

public class Parent{
    private class ParentPk implements Serializable {
        private static final long serialVersionUID = 1L;
        private String deviceId;
        private String dateTime;
    }
    @EmbeddedId
    @AttributeOverrides(value = {
            @AttributeOverride(name = "deviceId", column = @Column(name = "DeviceId")),
            @AttributeOverride(name = "dateTime", column = @Column(name = "BillingDateTime"))
    })
    private ParentPk pK;
    //Getters and setters
}

感谢任何帮助。

【问题讨论】:

    标签: spring-boot jpa


    【解决方案1】:
        @Entity
        public static class Child {
    
            private class ChildPk implements Serializable {
                private static final long serialVersionUID = 1L;
    
                @ManyToOne
                private Parent parent;
    
                private int index;
                //Getters and setters
            }
    
            @EmbeddedId
            @AssociationOverride(name = "parent", joinColumns = {
                    @JoinColumn(name = "DeviceId", referencedColumnName = "DeviceId"),
                    @JoinColumn(name = "BillingDateTime", referencedColumnName = "BillingDateTime")
            })
            @AttributeOverride(name = "index", column = @Column(name = "TierIndex"))
            private ChildPk pK;
            //getters and setters
        }
    
        @Entity
        public static class Parent{
            private class ParentPk implements Serializable  {
                private static final long serialVersionUID = 1L;
                private String deviceId;
                private String dateTime;
            }
            @EmbeddedId
            @AttributeOverrides(value = {
                    @AttributeOverride(name = "deviceId", column = @Column(name = "DeviceId")),
                    @AttributeOverride(name = "dateTime", column = @Column(name = "BillingDateTime"))
            })
            private ParentPk pK;
            //Getters and setters
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-02-21
      • 2015-02-03
      • 2019-04-22
      • 2011-03-20
      • 1970-01-01
      • 1970-01-01
      • 2021-09-19
      • 2017-01-03
      相关资源
      最近更新 更多