У меня три стола.первый - это компания (родитель), второй - работник (дочерний элемент), а третий - employee_details (дочерний элемент сотрудника).в эту таблицу будут вставлены тысячи записей, поэтому мне нужно использовать пакетную обработку для повышения производительности.Как я написал код, как показано ниже.но я получаю исключение ограничения внешнего ключа для дочерней таблицы.Как я полагаю, это может быть из-за того, что оператор вставки дочерней таблицы может быть выполнен первым до родителя.пожалуйста, предложите мне хороший подход для достижения пакетной обработки в следующем сценарии.
int count1 =0;
int count2 =0;
int count3 =0;
for(Company c :companies){
int companyId = session.merge(c);
if(count1 % 100 == 0) {
session.flush();
session.clear();
}
count1++;
for(Employee e: c.getEmployees) {
int empId = e.setCompanyId(companyId);
session.merge(e);
if(count2 % 100 == 0) {
session.flush();
session.clear();
}
count2++;
for(EmployeeDetails ed: e.getEmployeeDetails) {
ed.setEmployeeId(empId);
session.merge(ed);
}
if(count3 % 100 == 0) {
session.flush();
session.clear();
}
count3++;
}
}
int count1 =0;
int count2 =0;
int count3 =0;
for(Company c :companies){
int companyId = session.merge(c);
if(count1 % 100 == 0) {
session.flush();
session.clear();
}
count1++;
for(Employee e: c.getEmployees) {
int empId = e.setCompanyId(companyId);
session.merge(e);
if(count2 % 100 == 0) {
session.flush();
session.clear();
}
count2++;
for(EmployeeDetails ed: e.getEmployeeDetails) {
ed.setEmployeeId(empId);
session.merge(ed);
}
if(count3 % 100 == 0) {
session.flush();
session.clear();
}
count3++;
}
}