java - Hibernate 将子实体中的 ManyToOne 映射到父实体的复合键中的字段
问题描述
我有一个BookEntity
类,它有一个复合 id,由 Book 表中的id
列publishedDate
组成。
然后,我有一个BookMetaDataEntity
有自己 id 的类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;
}
问题:BookMetaDataEntity.book 的 referencedColumnNames(id) 引用 BookEntity 未映射到单个属性。
联接仅发生在id
=上,bookId
因为该BookMetaData
表没有publishedDate
列。
如何从子实体映射回父实体的复合键中的字段?
解决方案
推荐阅读
- javascript - 如何使用焦点选择带有jquery的文本
- vba - Outlook VBA - 在特定文件夹中自动回复
- java - Java JDBC MySQL 查询失败
- java - Android:无法暂停活动:java.lang.NullPointerException:空对象引用
- c - 为什么指针不能用于索引数组?
- javascript - 在手风琴列表中单击子元素时如何打开单击的并关闭其他的?
- javascript - 使用正斜杠访问 JSON 密钥 NodeJS
- git - Windows 中的 Git Bash 不工作(持续的权限被拒绝错误)
- c# - 使用反射从非通用 IEnumerable 获取列列表
- haskell - 如何将函数应用于 Haskell 中的嵌套字符串列表?