Весенние данные JPA. Данные родительской таблицы не возвращаются при возникновении исключения при вставке записи в дочернюю таблицу - PullRequest
0 голосов
/ 31 января 2020

У меня есть две таблицы отношения один ко многим между таблицей Employee и Department, таблица Employee имеет идентификатор столбца в виде PK, Name и Sal, тогда как таблица Department имеет столбец Dept_ID, Dept_Name & Dept_Lo c и первичный ключ (Dept_ID, Dept_Name составной ключ, а Dept_ID - это внешний ключ ref из столбца Id таблицы Employee. Проблема заключается в том, что когда я сохраняю запись в родительской таблице, т. Е. Employee, она сохраняется, но в случае, если я получаю исключение при вставке записи для дочерней таблицы, т. Е. Таблицы Department, данные не возвращаются для таблицы EMployee. Пожалуйста, помогите мне в борьбе, и я прилагаю свой код.

public class GlEmployee implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "emp_seq")
@Column(name = "EMP_ID")
private long empId;

@Column(name = "EMP_CITY")
private String empCity;

@Column(name = "EMP_NAME")
private String empName;

@Column(name = "EMP_SALARY")
private BigDecimal empSalary;

// bi-directional many-to-one association to EmpDepartment
@OneToMany(mappedBy = "glEmployee",cascade = CascadeType.ALL)
private List<EmpDepartment> empDepartments = new ArrayList<>();

public GlEmployee() {
}

public long getEmpId() {
    return this.empId;
}

public void setEmpId(long empId) {
    this.empId = empId;
}

public String getEmpCity() {
    return this.empCity;
}

public void setEmpCity(String empCity) {
    this.empCity = empCity;
}

public String getEmpName() {
    return this.empName;
}

public void setEmpName(String empName) {
    this.empName = empName;
}

public BigDecimal getEmpSalary() {
    return this.empSalary;
}

public void setEmpSalary(BigDecimal empSalary) {
    this.empSalary = empSalary;
}

public List<EmpDepartment> getEmpDepartments() {
    return this.empDepartments;
}

public void setEmpDepartments(List<EmpDepartment> empDepartments) {
    this.empDepartments = empDepartments;
}

public EmpDepartment addEmpDepartment(EmpDepartment empDepartment) {
    getEmpDepartments().add(empDepartment);
    empDepartment.setGlEmployee(this);

    return empDepartment;
}

public EmpDepartment removeEmpDepartment(EmpDepartment empDepartment) {
    getEmpDepartments().remove(empDepartment);
    empDepartment.setGlEmployee(null);

    return empDepartment;
}

}

@Entity
@Table(name = "EMP_DEPARTMENT")
public class EmpDepartment implements Serializable {
private static final long serialVersionUID = 1L;

@EmbeddedId
private EmpDepartmentPK id;

@Column(name = "DEP_LOC")
private String depLoc;

public EmpDepartment(EmpDepartment id, String dep) {

}

// bi-directional many-to-one association to GlEmployee
@ManyToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "DEP_ID", insertable = false, updatable = false)
private GlEmployee glEmployee;

public EmpDepartment() {
}

public EmpDepartmentPK getId() {
    return this.id;
}

public void setId(GlEmployee glEmployee, String deptName) {
    EmpDepartmentPK empDepartment = new 
    EmpDepartmentPK(glEmployee.getEmpId(), deptName);
    this.id = empDepartment;
}

public String getDepLoc() {
    return this.depLoc;
}

public void setDepLoc(String depLoc) {
    this.depLoc = depLoc;
}

public GlEmployee getGlEmployee() {
    return this.glEmployee;
}

public void setGlEmployee(GlEmployee glEmployee) {
    this.glEmployee = glEmployee;
}

}

@Embeddable
public class EmpDepartmentPK implements Serializable {
// default serial version id, required for serializable classes.
private static final long serialVersionUID = 1L;

@Column(name = "DEP_ID")
private long depId;

@Column(name = "DEP_NAME")
private String depName;

public EmpDepartmentPK() {
}

public EmpDepartmentPK(long depId, String depName) {
    super();
    this.depId = depId;
    this.depName = depName;
}

public long getDepId() {
    return this.depId;
}

public void setDepId(long depId) {
    this.depId = depId;
}

public String getDepName() {
    return this.depName;
}

public void setDepName(String depName) {
    this.depName = depName;
}




@Service
public class EmployeeService {

@Autowired
private EmployeeRepository employeeRepository;

@Transactional
public void createEmp() {
    GlEmployee employee = new GlEmployee();
    employee.setEmpCity("Pune");
    employee.setEmpName("Ankush");
    employee.setEmpSalary(new BigDecimal(200));
    employeeRepository.save(employee);
    EmpDepartment department = new EmpDepartment();
    department.setId(employee, "ME");
    department.setDepLoc(null);
    department.setGlEmployee(employee);
    employee.addEmpDepartment(department);
    employeeRepository.save(employee);

  }

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