Я работаю над веб-проектом, пытаясь понять, как сделать это снова и снова:
- Чтение объекта A из БД
- Позже, прочитайте другой объект ( B )
- Внесите изменения в A и B в БД (какчасть транзакции - напишите все изменения или их нет)
Путь типа JDBC старого skool не является проблемой, но JPA решает мою задачу.
Мне нужно четко разграничить, где происходят изменения в БД, и из того, что я наблюдал, любые изменения в управляемых объектах будут изменены при следующем вызове EntityManager.commit()
(независимо от транзакциибыл явно начат до изменений или нет).Верно?
Лучше ли быть уверенным, что все сущности никогда не управляются и всегда merge()
?
Мне приходится выбирать между этими двумя примерами:
RepaintAction1
User user = getUser(); //non-managed entity
Car car = getCar(123); //non-managed
car.setColor("Red");
user.setLog("Paints car red");
dao.update(car, user);
RepaintDAO1
entityTransaction.begin();
entityManager.merge(car);
entityManager.merge(user);
entityTransaction.commit();
Или:
RepaintAction2 (это то же самое, что и RepaintAction1 , но с управляемыми сущностями)
User user = getUser(); //managed entity
Car car = getCar(123); //managed
car.setColor("Red");
user.setLog("Paints car red");
dao.update(car, user);
RepaintDAO2
entityTransaction.begin();
entityManager.flush();
entityTransaction.commit();
Первое, что я не возражаю, но я должен упустить некоторые преимущества для управляемых объектов (какие?).Во втором мне не нравится, когда объем транзакций не ясен (и как обрабатывается откат?).
Но это единственные варианты (например, есть ли способ четко разграничить транзакции, используяуправляемые объекты)?Каков наилучший способ справиться с этим?
Я прошу прощения за то, что сделал это долго, но я просмотрел много документации, которая не помогла, и я даже не уверен, что то, что я наблюдаюправильно.