반응형
Spring Data JDBC: 리포지토리에서 세 번째 수준부터 중첩된 엔티티를 저장하지 않습니다.
나는 다음과 같은 구조를 가진 나무와 같은 실체를 유지할 것입니다.
CREATE TABLE `task` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`parent_id` INT(11) NULL DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE
)
COLLATE='utf8_general_ci'
ENGINE=InnoDB;
@Data
@Table
public class Task {
@Id
private Integer id;
@MappedCollection(idColumn = "parent_id")
private Set<Task> subItems;
}
public interface TaskRepository extends org.springframework.data.repository.CrudRepository<Task, Integer> {}
엔티티 초기화:
Task task = new Task();
Task task2= new Task();
Task task3= new Task();
task.setSubItems(Set.of(task2));
task2.setSubItems(Set.of(task3));
taskRepository.save(task);//auto-generated method
스프링 데이터 jdbc는 'task2' 및 'task'에 대해서만 삽입 작업을 수행합니다.'task3'이(가) 무시되었습니다.
Java11, Spring-data-jdbc 2.0.3, Mariadb 10.3
현재 형태에서는 Aggregate(및 Aggregate 루트)가 제대로 분리되지 않았기 때문에 Spring Data JDBC를 잘못 사용하고 있습니다.
Task
집계 루트인 것으로 보이며, 따라서 하나의 참조.Task
개체 참조가 아닌 ID를 사용해야 합니다.이에 대한 자세한 내용은 https://spring.io/blog/2018/09/24/spring-data-jdbc-references-and-aggregates 을 참조하십시오.
그러므로 저는 각각을 만드는 것을 추천합니다.Task
자체 집계입니다.
물론 Spring Data JDBC는 모델의 일부를 무시하는 대신 예외를 적용해야 합니다.https://jira.spring.io/projects/DATAJDBC/issues 에서 이에 대한 문제를 제기해 주십시오.
언급URL : https://stackoverflow.com/questions/63743267/spring-data-jdbc-repository-does-not-save-nested-entities-starting-from-third-l
반응형
'programing' 카테고리의 다른 글
메모리 스트림에서 Excel 워크북 열기 (0) | 2023.08.25 |
---|---|
서로 다른 활동에서 동일한 탐색 드로어 (0) | 2023.08.25 |
두 개의 다른 서버에서 테이블 조인 (0) | 2023.08.25 |
자바스크립트에서 긴 정규식을 여러 줄로 분할하는 방법은 무엇입니까? (0) | 2023.08.20 |
장고의 컬렉션 스태틱은 무슨 의미가 있습니까? (0) | 2023.08.20 |