jpa - JPA Mapping 发出一张带有多个表的表
问题描述
我有一个用于管理审批的表格,我不想添加更多附加列作为对其的引用
审批.java
@Entity
@Table
public class Approval {
@Id
private int id;
@Column
private int doc_key;
@Column
private int stage;
@Column
private int status;
//getter and setter
}
我有两种需要批准的文件 RFQ 和合同
询价单.java
@Entity
@Table
public class RFQ {
@Id
private int id;
@Column
private int status;
@OneToMany(mappedBy = "dockey" , fetch=FetchType.LAZY ,cascade = CascadeType.ALL)
private List<Approval> approvallist;
}
合同.java
@Entity
@Table
public class Contract {
@Id
private int id;
@Column
private int status;
@OneToMany(mappedBy = "dockey" , fetch=FetchType.LAZY ,cascade = CascadeType.ALL)
private List<Approval> approvallist;
}
如您所见,我正在使用此关联映射:
@OneToMany(mappedBy = "dockey" , fetch=FetchType.LAZY ,cascade = CascadeType.ALL)
但除非我有文档类 RFQ 或合同之一,否则它不起作用如果我想添加另一个文档,如 Porposal foe 示例
解决方案
考虑到数据库的观点,可以使用多种可能性对您想要的情况进行建模:
创建一个
Document
包含一对多关系的(抽象)基类,并让两种特定的文档类型都继承自它——因此您最终会得到一个被doc_key
列引用的文档表。使用专用表映射特定文档类型和批准之间的关系,以便每个特定文档类型包含与 a 的一对多关系,例如
RFQApproval
,包含ID
of theRFQ
和ID
of theApproval
并且您doc_key
从 中删除 theApproval
。
我个人的偏好是1,因为这体现了“每个审批链接到一个文档”和“RFQ和合同都是文档”的面向对象思维的思想。
推荐阅读
- sccm - 对于 v_Add_Remove_Programs 中的许多程序,InstallDate00 NULL
- entity-framework - 如何创建代码优先 DbContext 的视图?
- java - Axis2 命名空间/类路径问题
- angular - Angular 6 库智能感知/自动完成
- excel - Private Sub Worksheet_Change(ByVal Target As Range)不起作用
- javascript - 在 React 应用中映射数组以优化性能的最佳实践
- javascript - 模态弹出窗口未显示
- minio - 使用 dotnet 客户端在 minio 中上传不可搜索的流
- python - 如何从我创建的函数创建循环和新数据集?
- apache-camel - Sql 组件:使用多行并使用 onConsume 将它们全部标记为已处理