Обновите сущность дочернего класса из родительского класса, используя отношение OnetoMany - PullRequest
0 голосов
/ 21 марта 2019

У меня есть класс сотрудника и класс квалификации, я успешно добавил квалификацию сотрудника.Но, когда я пытаюсь обновить конкретную квалификацию сотрудников, добавив еще одну квалификацию.У меня нет идеи сделать. Просьба предложить некоторое представление

Класс сотрудника

@Entity
@Table(name = "Tbl_Employee")
public class Employee {

private int empId;
private String empName;
private Employee_Address addressDetail;
private List<Employee_Qualification> qualifications;

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name="EmployeeId", updatable = false, nullable = false)
public int getEmpId() {
    return empId;
}
public void setEmpId(int empId) {
    this.empId = empId;
}


@Column(name="EmployeeName")
public String getEmpName() {
    return empName;
}
public void setEmpName(String empName) {
    this.empName = empName;
}


@OneToOne(cascade=CascadeType.ALL, fetch=FetchType.EAGER)
@JoinColumn(name="EmpAdd_FK")
public Employee_Address getAddressDetail() {
    return addressDetail;
}
public void setAddressDetail(Employee_Address addressDetail) {
    this.addressDetail = addressDetail;
}


@OneToMany(targetEntity=Employee_Qualification.class, mappedBy="employee"
        ,cascade=CascadeType.ALL, fetch=FetchType.LAZY)
public List<Employee_Qualification> getQualifications() {
    return qualifications;
}
public void setQualifications(List<Employee_Qualification> qualifications) {
    this.qualifications = qualifications;
}
}

Квалификационный класс

@Entity
@Table (name="Tbl_Employee_Qualification")
public class Employee_Qualification {

private int qualificationId;
private String qualification;
private Employee employee;

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name="QualificationId", updatable = false, nullable = false)
public int getQualificationId() {
    return qualificationId;
}
public void setQualificationId(int qualificationId) {
    this.qualificationId = qualificationId;
}

@Column(name="Qualifications")
public String getQualification() {
    return qualification;
}
public void setQualification(String qualification) {
    this.qualification = qualification;
}

@ManyToOne(cascade=CascadeType.ALL, fetch=FetchType.EAGER)
@JoinColumn(name="Emp_FK")
public Employee getEmployee() {
    return employee;
}
public void setEmployee(Employee employee) {
    this.employee = employee;
}
}

Класс реализации

     //      Update Employee and Employee_Qualification from Employee entity class [OnetoManny and ManytoOne bidirectional]   
     Employee emp =(Employee) session.createQuery("from Employee where empId='10'").uniqueResult();
    Employee_Qualification  newQ1  = new Employee_Qualification();
    newQ1.setQualification("ECE");

    List<Employee_Qualification> q1 = emp.getQualifications(); 
    q1.add(newQ1);

    emp.setQualifications(q1);
    session.save(q1);
    session.getTransaction().commit();

1 Ответ

0 голосов
/ 21 марта 2019

Если у вас двунаправленное отношение, вам нужно соединить обе стороны.В вашем примере у вас уже есть это:

q1.add(newQ1);

, но вам также необходимо выполнить обратную привязку:

newQ1.setEmployee(emp)

Просто примечание: у вас есть Cascade.ALL для обоих отношений (oneToMany и ManyToOne) между вашим сотрудником и квалификацией.Я не запускаю ваш код, но я уверен, что это создаст проблему.Вы должны решить, какая организация отвечает за обновление другой.(То есть, если вы решите сохранить квалификации и изменения, подлежащие распространению на сотрудника, удалите каскад из @oneToMany в классе Employee

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...