Спринг -загрузочная копия родителей и детейJAVA

Программисты JAVA общаются здесь
Anonymous
Спринг -загрузочная копия родителей и детей

Сообщение Anonymous »

Как я могу использовать (Spring Boot / Hibernate / JPA) для создания копии родительского объекта, а также для копирования всех детей. Процедура. Детей жаждут загрузки, так как это не сделано под @Transactional, и поэтому ленивый не сработает. Не использовать @Transacional позволяет мне установить id = null ко всем объектам, чтобы, когда я буду сохранять их, они были вставлены в виде новых записей
[*], тогда я звоню @transactional Service Method
Сохранить родителей, чтобы ID заполнялся < /li>
set child.parent_id = (идентификатор родителей) < /li>
Сохранить Дети

Мне нужно, чтобы эта часть была @transactional в случае сохранения родителя, но дети не так, чтобы в этом случае переворачивались.
Одна проблема заключается в том, что таким образом я не могу использовать ленивую загрузку. Контроллер, так как он не может быть под @transactional Потому что тогда я не могу использовать id = null. < /p>
Я также не могу перенести этот код в метод обслуживания, который не является @TransActional, а затем вызовуте другой метод обслуживания, который @Transactional для выполнения Сохранение, потому что когда метод @transactional вызывается в методе обслуживания, тогда @transactional Annotation игнорируется. сложный в том же Время должно знать обо всех этих соображениях.@GetMapping(path = "/{schemaId}/copyEntityList", produces = "application/json")
public void copyEntityList(@RequestBody List ids) throws RuntimeException {

//GET ENTITIES
List entities = entityRepository.findAllById(ids);

//INSERT ENTITIES
copyService.insertEntities(entities);

}
< /code>
copyservice2.java
@Transactional
public void insertEntities(List entities) throws RuntimeException {

//REMOVE IDS, CHANGE NAME & CODE
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
for(Entity2 entity : entities) {
entity.setName(entity.getName() + " - COPY (" + LocalDateTime.now().format(formatter) + ")");
entity.setCode(entity.getCode() + " (" + LocalDateTime.now().format(formatter) + ")");
entity.setId (null);
}

//INSERT PARENTS (to get IDs)
entityRepository.saveAll(entities);

if (false) { throw new RuntimeException("Error"); }

//UPDATE CHILDREN (with PARENT_ID)
List clonedChildEntities = new ArrayList();
for(Entity2 parentEntity : entities) {
for(Entity2 childEntity : parentEntity.getChildEntities()) {
childEntity.setId (null);
childEntity.setParentId(parentEntity.getId());
childEntity.setName (childEntity.getName() + " - COPY (" + LocalDateTime.now().format(formatter) + ")");
childEntity.setCode (childEntity.getCode() + " (" + LocalDateTime.now().format(formatter) + ")");
clonedChildEntities.add(childEntity);
}
}

//INSERT CHILDREN
entityRepository.saveAll(clonedChildEntities);

}


Подробнее здесь: https://stackoverflow.com/questions/794 ... d-children

Вернуться в «JAVA»