У меня есть два сущности - программное обеспечение и сотрудник - с отношением oneToMany, и они находятся на одном уровне.JPA Аннотация @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;
}
}
Software.class
@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;
}
}
Идея заключается в том, чтобы иметь графический интерфейс со списком программного обеспечения, где записи могут быть удалены, добавлены и присвоенным каждому сотруднику.
В моем случае я буду иметь дублирующие записи программного обеспечения, которые отличаются только в employee_id. Проблема в том, что если я отредактирую запись, это не повлияет на все записи, и если я удалю взаимосвязь, я не захочу удалить запись как сам, потому что, если она удалена, я не могу назначить это программное обеспечение другому сотруднику.
Правильно ли это или можно решить проблему с помощью @JoinTable, создав третью таблицу? Есть ли у кого-то идеи?
Не использовать CascadeType.ALL – Mehdi