Я хочу обновить сущность и в асинхронном методе сравнить старую версию сущности с новой, но когда я передаю старую версию сущности в параметрах асинхронного метода, все ленивые атрибуты сущностиноль.
@Entity
public class Item {
@ManyToMany(fetch = FetchType.LAZY)
@JoinTable(name = "production_input", inverseJoinColumns
@JoinColumn(name = "production_id"))
private List<Production> inputProduction;
}
@Service
public class ItemService {
@Autowired
@Qualifier("entityManagerFactory")
private EntityManagerFactory emFactory;
@Autowired
private ItemRepository itemRepository;
@Autowired
private ProductionService productionService;
public update(Item item) {
EntityManager entityManager = emFactory.createEntityManager();
Item oldItem = entityManager.find(item.getClass(),item.getId());
this.itemRepository().save(item);
this.productionService.asyncComputeProductionUpdate(oldItem, item,this);
}
public void computeProductionUpdate(Item oldItem,Item item){
.... //use of oldItem and new item.
}
}
@Service
public class ProductionService {
@Autowired
private AsyncProductionProcess asyncProductionProcess;
@Async
public void asyncComputeProductionUpdate(Item oldItem,Item item,ItemService itemService) {
this.asyncProductionProcess.setProductionService(itemService);
this.asyncProductionProcess.asyncComputeProductionUpdate(oldItem, item);
}
}
@Service
public class AsyncProductionProcess {
private ItemService itemService;
public void setItemService(ItemService itemService ) {
this.itemService = itemService ;
}
@Transactional
public void asyncComputeProductionUpdate(Item oldItem, Item item) {
this.itemService.computeProductionUpdate(oldItem, item);
}
}
Моя идея состояла в том, чтобы объявить новую фабрику диспетчера сущностей для получения версии в базе данных, и таким образом у меня будет новая версия в транзакции и старая версия, но когда я отправлю две версии впараметры асинхронного метода, с новой версией все в порядке, я могу получить доступ ко всем спискам, но для старой версии у меня есть нуль в списках, я попытался весенний класс sharedentitymanagercreator, чтобы создать менеджер сущностей, но с этим классом вВ асинхронном методе старая и новая версии имеют одинаковые значения списков.со всем, что я пробовал, я столкнулся с двумя случаями: первый - старая версия имеет нулевой список, а второй - старая и новая версии совпадают.Первый вызванный метод - это обновление (Item item) в ItemService.