【问题标题】:One to mapping between to composite primary keys jpa一到复合主键jpa之间的映射
【发布时间】:2018-05-08 03:39:14
【问题描述】:

我确实有一个用例,两个表具有复合主键,一个表与数据库中的另一个表有关系,如何在程序级别获得这种关系,如何声明 bean 类

//表Project的复合主键

    @Embeddable
    @Data
    public class ProjectId implements Serializable {

        private static final long serialVersionUID = 12233365L;

        @Column(name = "PROJECT_CODE")
        private Integer pCode;

        @Column(name = "BOL")
        private String bol;

        @Column(name = "BOLS")
        private String bols;

        @Column(name = "EID")
        private Integer eId;

    }

//项目类

public class Project implements Serializable {

    private static final long serialVersionUID = 748569L;

    @EmbeddedId
    private ProjectId projectId;

    @Column(name = "UPDATED_DATE")
    private Date updatedDate;

    @Column(name = "CREATED_DATE")
    private Date createdDate;

}

//pcode、bol、bols、eId是复合键

// 文档表,这里有一些比较有意思的Project之间的关系p,Document是“pcode, bol, bols, eId + did”

@Embeddable
@Data
public class DocumentId implements Serializable {

    private static final long serialVersionUID = 458933256L;

    @Column(name = "PROJECT_CODE")
    private Integer pCode;

    @Column(name = "BOL")
    private String bol;

    @Column(name = "BOLS")
    private String bols;

    @Column(name = "EID")
    private Integer eId;

    @Column(name = "DID")
    private String dId;
}

//文档表

@Entity
@Table(name = "DOCUMENT")
@Data
public class Documents implements Serializable {

    private static final long serialVersionUID = 14578523695L;

    @EmbeddedId
    private DocumentId documentId;

    @Column(name = "JUR")
    private String jur;

    @Column(name = "DSEQUENCE")
    private Integer dSequence;

    @Column(name = "UPDATED_DATE")
    private Date updatedDate;

    @Column(name = "CREATED_DATE")
    private Date createdDate;

}

两个表的关系Document是Project的子表,
我想从项目方面建立一个关系。 从文档到项目也很好

如何映射表之间的一对一关系??

【问题讨论】:

    标签: hibernate jpa spring-data-jpa


    【解决方案1】:
    1. 文档表应包含项目实体的关键列(pCode、bol 等)
    2. 在 Document 类中添加这个成员:

      @OneToOne
      @JoinColumns({@JoinColumn(name = "pCode", referencedColumnName = "PROJECT_CODE"),
                    @JoinColumn(name = "bol", referencedColumnName = "BOL"),
                    @JoinColumn(name = "bols", referencedColumnName = "BOLS"),
                    @JoinColumn(name = "eid", referencedColumnName = "EID")})
      @MapsId("projectId")
      private Project project;
      

    【讨论】:

    • 感谢您的回答,是否可以从项目方进行交易??
    • 是的,另一边也是如此。确保在 Project 表中添加 DocumenId 列
    【解决方案2】:

    我没有足够的声望来添加评论。但是这是一个一对一的映射,因为在 Document 表中具有列 DID 证明了您可以通过具有不同的 DID 来为同一个项目拥有多个文档。我不确定我是否在这里遗漏了什么。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-10-04
    • 2019-04-22
    • 1970-01-01
    • 2016-09-18
    • 2017-01-30
    • 1970-01-01
    • 2017-02-21
    • 2018-11-28
    相关资源
    最近更新 更多