在ForEach中保持事务上下文中的实体(Spring MVC + JPA)

时间:2014-09-22 18:07:47

标签: java spring spring-mvc jpa

我正在使用Spring MVC和JPA,而且我不知道如果没有在ForEach中更新实体,它是如何保持实体的。

@Transactional
public void save(House house, List<Long> room) {        
    for (Long id : room) {
        house.setRoom(new Room(id));
        houseDao.save(house);
    }
}

public void save(House house) {
    entityManager.persist(house);
}

我想在循环的每个关系中保留一个只会改变房间信息的新对象。

1 个答案:

答案 0 :(得分:0)

假设House有一套/房间清单。

是否已为House类中的房间定义了CascadeType.PERSIST?

class House {
      @OneToMany(mappedBy = "whatever", cascade = { CascadeType.MERGE, CascadeType.REMOVE, CascadeType.PERSIST })
    private List<Room> rooms;
}

现在您的代码变为:

@Transactional
public void save(House house, List<Long> room) {        
    for (Long id : room) {
        house.getRooms().add(new Room(id));
    }
    houseDao.save(house);

}

public void save(House house) {
    entityManager.persist(house);
}