首页 > 解决方案 > Hibernate 将子实体中的 ManyToOne 映射到父实体的复合键中的字段

问题描述

我有一个BookEntity类,它有一个复合 id,由 Book 表中的idpublishedDate组成。

然后,我有一个BookMetaDataEntity有自己 id 的类metaDataId

关系是一本书有许多元数据行。将第一列与第二列BookEntity连接起来。反之亦然,我也在第二个实体上定义。BookMetaDataEntityidbookIdJoinColum

BookEntity.java

@Entity
@Table(name = "Book")
public class Book {
    @EmbeddedId
    private CompositeId compositeId;

    @Column(name = "author")
    private String author;

    @OneToMany(cascade = CascadeType.DETACH, fetch = FetchType.LAZY, targetEntity = BookMetaDataEntity.class)
    @JoinColumn(name = "id", referencedColumnName = "bookId", insertable = false, updatable = false)
    private List<BookMetaDataEntity> metaData;
}

CompositeId.java

@Embeddable
public class CompositeId implements Serializable {
    @Column(name = "id")
    private int id;

    @Column(name = "publishedDate")
    private int publishedDate;
}

BookMetaDataEntity.java

@Entity
@Table(name = "BookMetaData")
public class BookMetaDataEntity {
    @Id
    @Column(name = "metaDataId")
    private int metaDataId;

    @Column(name = "bookId")
    private int bookId;

    @Column(name = "attribute")
    private String attribute;

    @Column(name = "value")
    private String value;

    @ManyToOne(cascade = CascadeType.DETACH, fetch = FetchType.LAZY, targetEntity = BookEntity.class)
    @JoinColumn(name = "bookId", referencedColumnName = "id", insertable = false, updatable) 
    private Book book;
}

问题:BookMetaDataEntity.book 的 referencedColumnNames(id) 引用 BookEntity 未映射到单个属性。

联接仅发生在id=上,bookId因为该BookMetaData表没有publishedDate列。

如何从子实体映射回父实体的复合键中的字段?

标签: javahibernatejpa

解决方案


推荐阅读