【发布时间】:2017-01-18 22:24:31
【问题描述】:
我有两个实体 - 软件和员工 - 具有 oneToMany 关系,它们处于同一级别。
@Entity(name = "EMPLOYEE")
public class Employee {
private long employeeId;
private String firstName;
private String lastName;
private List<Software> software;
@Id //signifies the primary key
@Column(name = "EMPLOYEE_ID", nullable = false)
@GeneratedValue(strategy = GenerationType.AUTO)
public long getEmployeeId() {
return employeeId;
}
public void setEmployeeId(long employeeId) {
this.employeeId = employeeId;
}
@Column(name = "FIRST_NAME", length = 50)
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
@Column(name = "LAST_NAME", nullable = false,length = 50)
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
@OneToMany(
fetch = FetchType.EAGER,
cascade = CascadeType.ALL,
orphanRemoval = true,
targetEntity = Software.class)
@Fetch(FetchMode.SUBSELECT)
public List<Software> getSoftware() {
return software;
}
public void setSoftware(Software software) {
this.software = software;
}
}
软件类
@Entity(name = "SOFTWARE")
public class SOFTWARE {
private long softwareId;
private String softwareName;
private String version;
private Employee emp;
@Id
@Column(name = "SOFTWARE_ID", nullable = false)
@GeneratedValue(strategy = GenerationType.AUTO)
public long getSoftwareId() {
return softwareId;
}
public void setSoftwareId(long softwareId) {
this.softwareId = softwareId;
}
@Column(name = "SOFTWARE_NAME")
public String getSoftwareName() {
return softwareName;
}
public void setSoftwareName(String name) {
this.name = name;
}
@Column(name = "SOFTWARE_VERSION")
public String getSoftwareVersion() {
return softwareDesc;
}
public void setSoftwareVersion(String version) {
this.version = version;
}
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "EMPLOYEE_ID", nullable = true)
public String getEmployee() {
return emp;
}
public void setEmployee(Employee emp) {
this.emp = emp;
}
}
这个想法是有一个带有软件列表的 gui,可以在其中删除、添加记录并分配给每个员工。
在我的情况下,我将有重复的软件记录,这些记录仅在员工 ID 上有所不同。问题是如果我编辑一条记录,它不会影响所有记录,如果我删除关系,我不想删除记录本身,因为如果它被删除,我无法将此软件分配给其他员工。
这是正确的方法还是可以通过创建第三个表使用@JoinTable 解决问题? 有人有想法吗?
【问题讨论】:
-
不要使用 CascadeType.ALL
标签: java hibernate jpa persistence one-to-many