В одном из наших весенних пакетных заданий мы создаем дополнительные объекты (CompanyProfile
) во время обработки и сохраняем их в БД (в отдельной транзакции). Эти сущности ссылаются другими лицами (Vacancy
), которые будут сохранены писателем, но неудачливый писатель терпит неудачу с этой ошибкой:Весенняя партия не может найти сущность, сохраняющуюся при обработке
Caused by: javax.persistence.EntityNotFoundException: Unable to find com.company.CompanyProfile with id 1409881
Модели следующим образом:
@Entity
public class Vacancy {
@ManyToOne(fetch = FetchType.EAGER, optional = true)
@JoinColumn(name = "company", nullable = true)
private CompanyProfile company;
...
}
@Entity
public class CompanyProfile {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
...
}
В процессор у нас есть это:
CompanyProfile company = companyProfileService.handleCompany(compName);
vacancy.setCompany(company);
Если метод companyProfileService.handleCompany()
помечается @Transactional(readOnly = false, propagation = Propagation.REQUIRES_NEW)
Уверен, что CompanyProfile
сохраняется. Я вижу это в БД, но когда Vacancy
сохраняется на ItemWriter
, он не справляется с вышеуказанным исключением. (также обратите внимание, что идентификатор сохраняемого объекта упоминается в приведенном выше исключении)
Вы видите причину, по которой писатель потерпит неудачу в этом случае?
большое спасибо - некоторые из того, что я не думал об уровне изоляции ... решил его с помощью «READ_COMMITTED», – domi