外键映射 JPA

时间:2021-04-05 07:28:23

标签: spring-boot jpa

我有一个如下所述的父子实体。 (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
}

感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

    @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
    }