Способ сохранения объекта в БД с помощью метода сохранения Hibernate в цикле for - PullRequest
0 голосов
/ 24 апреля 2020

Я пытаюсь добавить несколько объектов сотрудника в БД, но в БД добавляется только последний объект. и я хочу использовать l oop только для добавления нескольких объектов.

Ниже приведен код. (Примечание. Я только что начал опираться на пружину, поэтому прошу вас уточнить ответ)

@ PostMapping ("/ employee")

public Employee addEmployee(@RequestBody Employee employee) {
    employeeService.save(employee);
    return employee;
}

@ Service

publi c Класс EmployeeServiceImpl реализует EmployeeService {

@Override
@Transactional
public void save(Employee employee) {
    for(int i=0;i<10;i++) {
        Employee emp = getDummyEmployee(employee,i);
        employee = emp;
        employeeDao.save(employee);
        System.out.println("After save----"+emp);
    }
}

private Employee getDummyEmployee(Employee emp,int i) {
    emp.setFirstName(emp.getFirstName().concat(""+i));
    emp.setLastName(emp.getLastName().concat(""+i)); 
    emp.setEmail(emp.getEmail().concat(""+i));
    return emp;
}

}

@ Репозиторий

publi c Класс EmployeeDAOImpl реализует EmployeeDAO {

private EntityManager entityManager ;

@Autowired
public EmployeeDAOImpl(EntityManager entityManager) {
    this.entityManager = entityManager;
}

@Override
public void save(Employee employee) {
    // TODO Auto-generated method stub
    // get current hibernate session
    Session currentSession = entityManager.unwrap(Session.class);

    currentSession.save(employee);
}

} ​​

1 Ответ

0 голосов
/ 24 апреля 2020

Hibernate рассматривает экземпляры как управляемые сущности, если вы изменяете тот же экземпляр, Hibernate сохраняет свое значение в базе данных, переопределяя старые значения.

Решением является создание нового экземпляра модели для каждой записи.

@Override
@Transactional
public void save(Employee employee) {
    for(int i=0;i<10;i++) {
        Employee emp = getDummyEmployee(employee,i);
        employee = emp;
        employeeDao.save(emp);
        System.out.println("After save----"+emp);
    }
}

private Employee getDummyEmployee(Employee other, int i) {
    Emplyee emp = new Employe();
    emp.setFirstName(other.getFirstName().concat(""+i));
    emp.setLastName(other.getLastName().concat(""+i)); 
    emp.setEmail(other.getEmail().concat(""+i));
    return emp;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...