У меня есть класс BookEntity
, у которого составной идентификатор состоит из id
и publishedDate
столбцов в таблице Book.
Затем у меня есть класс BookMetaDataEntity
, который имеет собственный идентификатор metaDataId
.
Связь состоит в том, что в одной книге много строк метаданных.BookEntity
объединяет BookMetaDataEntity
в первом столбце id
со вторым столбцом bookId
.И наоборот, я также определяю JoinColum
для второй сущности.
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;
}
Проблема : referencedColumnNames (id) объекта BookMetaDataEntity.book, ссылающегося на BookEntity, не сопоставлен с одним свойством.
Объединение происходит только на id
= bookId
, поскольку таблица BookMetaData
не имеет столбца publishedDate
.
Как мне сопоставить дочернюю сущность споле в составном ключе родительского объекта?