У меня есть служба, которая использует хранилище данных Spring для извлечения объекта. Служба НЕ помечена как транзакционная, поэтому я предположил, что любой объект, возвращаемый из хранилища, будет отсоединен, поскольку транзакция будет ограничена хранилищем. Однако, кажется, что объект НЕ отделен, что удивляет меня. Вот пример кода:
public class MyService {
@Autowired
private MyRepository repo;
@Autowired
private EntityManager entityManager;
/**
* Updates a persisted entity based on the given DTO representation.
*/
public MyObjectDto update(MyObjectDto dto) {
MyObjectJpa existing = repo.findOne(dto.getId());
entityManager.isJoinedToTransaction(); // returns false so no transaction should be active in this scope I would assume
entityManager.contains(existing); // this returns true, but I don't know why
if (existing != null) {
MyObjectJpa updated = toJpa(dto);
// calling repo.save(..) modifies the state of 'existing' object which surpised me
MyObjectDto updatedDto = toDto(repo.save(updated));
return updatedDto;
}
return null;
}
Почему «существующий» объект в моем примере кода все еще управляется entityManager, даже если мой метод обслуживания не помечен как транзакционный (т.е. не использует аннотацию @Transactional из Spring)? Спасибо.