java - 在 for 循环中使用 Hibernate save 方法将对象持久保存在数据库中的方法

标签 java hibernate spring-boot rest

我试图在数据库中添加多个员工对象,但只有最后一个对象添加到数据库中。 我只想使用循环来添加多个对象。

以下是代码。 (注意 - 我刚刚开始学习 spring,所以我请求你详细说明答案)

@PostMapping("/员工")

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

@服务

公共(public)类 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;
}

}

@存储库

公共(public)类 EmployeeDAOImpl 实现 EmployeeDAO{

私有(private)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);
}

}

最佳答案

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;
}

关于java - 在 for 循环中使用 Hibernate save 方法将对象持久保存在数据库中的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61408266/

相关文章:

java - 伪造的 HTTP 获取请求

java - @JoinColumn 注解中名称和引用列名的区别?

java - 如何在 spring mvc 中为图像定义 getter 和 setter

hibernate - JPA EntityManager,它是如何工作的?

java - 如何检查用户是否是 thymeleaf 中当前帖子/主题的所有者?

spring-security - gsp 中的 Grails 3 Spring 安全标签

java - 使用比较器 "offtopic"是不好的 java 风格吗?

java - 测试通过后关闭浏览器

java - XML 未正确创建 : content is empty

java - Spring Jpa - hibernate 在数据库中保存一行空值