Невозможно выполнить пакетную обработку с несколькими таблицами (родительскими дочерними таблицами), используя Hibernate - PullRequest
0 голосов
/ 20 мая 2019

У меня три стола.первый - это компания (родитель), второй - работник (дочерний элемент), а третий - 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++;
      }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...