У меня есть базовый вопрос Hibernate / JPA. Я хочу найти лучшее решение решение для сохранения сущностей. У меня есть список сущностей, и многие из них могут быть изменены, поэтому я хочу сохранить их все сразу.
Я считаю, что все в значительной степени стандартно. (Просто пример кода для удобства чтения)
Сущность: Автомобиль
@Entity
public class Car implements Serializable {
private static final long serialVersionUID = 1L;
@Id
private id;
private String model;
// .... Setter
// .... Getter
}
Класс обслуживания: Автосервис
@Named
@Transactional
public class CarServiceImpl implements CarService {
@PersistenceContext
private EntityManager entityManager;
@Override
public List<Car> findAll() {
TypedQuery<Car> q = entityManager.createQuery(
"FROM Car", Car.class);
return q.getResultList();
}
@Override
public void saveEntity (Car car) {
/* What exactly am I doing here? */
}
}
Контроллер: CarEditController
@Named
public class CarEditController implements Serializable {
private static final long serialVersionUID = 1L;
@Inject
private CarService carService;
private List<Car> cars;
public List<Car> getCars () {
return carService.findAll();
}
public void setCars (List<Car> cars) {
this.cars = cars;
}
public void btn_newClick() {
Car newCar = new Car();
car setModel("BMW");
cars.add(newCar);
}
public void btn_saveClick() {
for (Car car : cars) {
carService.saveEntity(car);
}
}
}
Я нашел немало способов спасти сущность. Очевидными являются entityManager.merge (car) для существующих объектов и entityManager.persist (car) для новых. Теоретически это легко, но как узнать, какая сущность нова?
Документация предлагает entityManager.flush () , которая теоретически обновляет все существующие и вставляет все новые сущности. Это работает, но только если я получаю объект с помощью find () .
Вопрос:
Я хочу получить все объекты за один шаг, добавить новые и затем сохранить их все в одном методе (btn_saveClick ()). Как лучше всего выполнить эту задачу?