Open newcodingtest opened 2 years ago
위의 사진 관계이다
public class Task extends BaseEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name="TASK_ID")
private Long tid;
...
@OneToMany(mappedBy = "task", fetch = FetchType.LAZY, orphanRemoval = true)
private List<SubTask> subTaskList = new ArrayList<SubTask>();
public class SubTask extends BaseEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name="SUB_ID")
private Long sid;
...
@ManyToOne
private Task task;
상위작업_하위작업을 한곳에서 수정하는 로직을 택하고 있다.
public class TaskServiceImpl implements TaskService {
private final TaskRepository taskRepository;
private final SubTaskRepository subTaskRepository;
@Transactional
@Override
public long registerOrModify(TaskDTO dto) {
//1.파라미터로 들어온 상위작업을 갖고있는 하위작업들을 찾는다.
//2.1번 조건에 만족하는 하위작업들을 삭제한다.
//3.파라미터로 들어온 상위작업을 등록 또는 수정한다.
//4.파라미터로 들어온 새로운 하위작업들을 추가한다.
}
서비스 단에서는 상위 Repository 하위 Repository 를 각각 불러 save를 호출해줄 생각이다.
그러나 2개를 일일히 호출하기 보다는 1개로 할 수 있는 방법이 있을꺼같은데.... 상위 행동 하나로 하위 까지 같이 등록시키는 방법이 있나 좀더 고민해봐야 겠다..
https://stackoverflow.com/questions/24186767/how-do-i-update-a-jpa-field-that-has-orphanremoval-true
스택 오버플로우에 의하면
위의 예제 처럼 기존에 존재하는 연관관계를 지우고 새롭게 등록하는 로직을 추천하고 있다.