Utk*_*tku 0 java hibernate jpa relational-database libraries
@OneToMany默认情况下,注释会创建一个连接表,除非mappedBy指定了元素。
这种行为的原因是什么?例如,对于以下实体:
@Entity
public class User {
// ...
@OneToMany
private List<UserDocument> documents;
// ...
}
@Entity
public class UserDocument {
// ...
@ManyToOne
private User user;
// ...
}
Run Code Online (Sandbox Code Playgroud)
对于User实体,为什么不简单地休眠:
Userin的字段。UserDocumentUserDocumentmappedBy为@OneToMany自身的注释?不这样做并生成连接表作为默认行为的原因是什么?为什么 Hibernate(或 JPA)是这样设计的?
这背后的一个简单原因是 Hibernate 无法确定User内部类型的UserDocument字段对应于特定的User-UserDocument关系。如果没有mappedBy属性,Hibernate 只能创建连接表或在UserDocument表中插入生成的列。然而,后者改变了数据模型并引入了比它可以解决的更多问题(区分生成或声明的列;表模式不匹配模型类等)。因此 Hibernate 使用连接表来存储映射。
例如,如果您想跟踪修改文档的最后一个人,您可能需要在UserDocument. 这不能仅使用反射来推断和解决。
@Entity
public class UserDocument {
// ...
@ManyToOne
private User user;
@ManyToOne
private User lastModifiedBy;
// ...
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
585 次 |
| 最近记录: |