У нас есть метод maker, который впоследствии вызывает автора метода, и он выполняется в той же транзакции, в то время как в авторе List обновляется с некоторыми дополнительными данными, и этот список становится постоянным / обновляется на основе критериев обновления / вставки,это также в той же транзакции. Но проблема в том, что сущность 'XYZ', созданная во время авторизации автора, в то время как данные Списка не зафиксированы, поэтому произошла потеря данных Списка.
Мы проверили критерии генерации последовательности, а также проверили уровень распространения транзакции, который имеет Требуемое распространение везде.
class ABC {
@Transactional(propagation = Propagation.REQUIRED)
function performMakerAuthor() {
maker() ;
author();
}
}
class checker {
@Transactional(propagation = Propagation.REQUIRED)
function maker() {
//do somthing
}
@Transactional(propagation = Propagation.REQUIRED)
function author {
object xyz = new object() ; //created new object
persist(xyz);
List<Person> list = {p1,p2,p3,p4}; // already present in database
list.add(p5) // added additionally
saveOrUpdate(list);
}
}
class persistOrUpdateDao {
@Transactional(propagation = Propagation.REQUIRED)
function saveOrUpdate(List<Installment> list) {
for(Installment inst : list) {
if(inst.getId() == null)
em.persist(inst);
else
em.update(inst);
}
}
@Transactional(propagation = Propagation.REQUIRED)
function persist(object obj) {
em.persist(obj);
}
}
Вся транзакция должна быть откатана, если список не будет сохранен, хотя этого не произошло, объект, созданный в той же транзакции, будет зафиксирован,Это действительно странно.