spring-data-jpa @OneToOne实体的复合主键

x6h2sr28  于 2022-11-10  发布在  Spring
关注(0)|答案(1)|浏览(184)

这个案子我需要帮助。
我有以下实体(为了便于阅读,我删除了getter/setter/hash/toString):

@Entity
    public class Company implements Serializable{
        @Id
        private String id;
    }

    @Entity
    public class Document implements Serializable{
        @Id
        private String id;
    }

    @Entity
    @IdClass(Inbox.PK.class)
    public class Inbox implements Serializable {
        @Id
        @ManyToOne(fetch = FetchType.LAZY)
        private Company company;

        @Id
        @ManyToOne(fetch = FetchType.LAZY)
        private Document document;

        @OneToOne(fetch = FetchType.LAZY, mappedBy = "inbox")
        private Invoice invoice;

        public class PK implements Serializable{
            private Company company;
            private Document document;
        }
    }

第一个问题是,我应该在PK类中使用Company和Document类型还是String和String?
这里......头痛的是:

@Entity
    @IdClass(Invoice.PK.class)
    public class Invoice implements Serializable {
        @Id
        @OneToOne(fetch = FetchType.LAZY, mappedBy = "invoice")
    //  @MapsId // ???
        @JoinColumn(name = "companyId")//, referencedColumnName = "company")// ???
        @JoinColumn(name = "documentId")//, referencedColumnName = "document")// ???
    //  @PrimaryKeyJoinColumn // ????
        private Inbox inbox;

        @Data
        public static class PK implements Serializable {
    //      private Inbox inbox; // ???
    //      private String company,document; // ???
    //      private String companyId,documentId; // ???
    //      private String inboxCompanyId,inboxDocumentId; // ???
        }
    }

发票实体的主键也是到收件箱的FK(我希望生成约束),收件箱的主键由两个实体组成(公司和单据)。
我更喜欢使用IdClass而不是EmbeddedId。
如何配置发票,使其末尾的(company_id,document_id)作为收件箱的PK和FK?

dxpyg8gm

dxpyg8gm1#

我在upwork上看到了你的问题。我认为你应该在PK类中使用字符串+字符串类型的字段,并带有@Id和@Column注解。

相关问题