JPA映射问题一表多表
我有一个用于管理批准的表,我不想添加更多的列作为对它的引用 Approval.javaJPA映射问题一表多表,jpa,Jpa,我有一个用于管理批准的表,我不想添加更多的列作为对它的引用 Approval.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 } @Entity @Table pub
@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
}
@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;
}
@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;
}
我有两种类型的文件RFQ和合同需要批准
RFQ.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
}
@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;
}
@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;
}
但它不工作,除非我有一个文件类RFQ或合同
如果我想添加另一个文档,如Porposal foe示例,从数据库的角度考虑,可以使用多种可能性对您所需的情况进行建模:
Document
,该基类包含一对多关系,并让两种特定的文档类型继承自该基类-因此最终会得到一个由doc\u key
列引用的文档表RFQApproval
,其中包含RFQ
的ID
和批准的ID
,然后删除doc\u键
从批准
我个人的偏好是1,因为这反映了“每个审批链接到一个文档”和“询价和合同都是文档”的面向对象思想。使用JoinColumn,而不是mappedBy
@OneToMany(fetch=FetchType.LAZY ,cascade = CascadeType.ALL)
@JóinColumn(name="dockey", referenceColumnName="doc_key")
private List<Approval> approvallist;
@OneToMany(fetch=FetchType.LAZY,cascade=CascadeType.ALL)
@JóinColumn(name=“dockey”,referenceColumnName=“doc_key”)
私人名单批准名单;
对其他实体执行相同的操作。我估计审批表有一个doc_key列,RFQ和contract有一个dockey列。SkillSet就像一个审批类
public class Project {
@Id
@Column(name = "PROJECT_ID")
@ColumnPosition(position = 1)
private Integer projectId;
@OneToMany
@JoinTable(
name = "MAP_PROJECT_SKILL_SET",
joinColumns = @JoinColumn(name = "PROJECT_ID"),
inverseJoinColumns = @JoinColumn(name = "SKILL_SET_ID"),
schema = Constants.DB_SCHEMA_NAME
)
private List<SkillSet> skillSet= new ArrayList<>();
}
public class Employee {
@Id
@Column(name = "EMPLOYEE_ID")
@ColumnPosition(position = 1)
private Integer projectId;
@OneToMany
@JoinTable(
name = "MAP_EMPLOYEE_SKILL_SET",
joinColumns = @JoinColumn(name = "EMPLOYEE_ID"),
inverseJoinColumns = @JoinColumn(name = "SKILL_SET_ID"),
schema = Constants.DB_SCHEMA_NAME
)
private List<SkillSet> skillSet = new ArrayList<>();
}
public class SkillSet {
@Id
@Column(name = "SKILL_SET_ID")
@ColumnPosition(position = 1)
private Integer id;
}
公共类项目{
@身份证
@列(name=“PROJECT\u ID”)
@列位置(位置=1)
私有整数投影;
@独身癖
@可接合(
name=“映射项目技能集”,
joinColumns=@JoinColumn(name=“PROJECT\u ID”),
inverseJoinColumns=@JoinColumn(name=“SKILL\u SET\u ID”),
schema=Constants.DB\u schema\u NAME
)
private List skillSet=new ArrayList();
}
公营雇员{
@身份证
@列(name=“EMPLOYEE\u ID”)
@列位置(位置=1)
私有整数投影;
@独身癖
@可接合(
name=“映射员工技能集”,
joinColumns=@JoinColumn(name=“EMPLOYEE_ID”),
inverseJoinColumns=@JoinColumn(name=“SKILL\u SET\u ID”),
schema=Constants.DB\u schema\u NAME
)
private List skillSet=new ArrayList();
}
公开课技能集{
@身份证
@列(name=“SKILL\u SET\u ID”)
@列位置(位置=1)
私有整数id;
}
我喜欢,我会尽力去做