작성
·
132
2
다음은 강의와 실습을 통해 얻은 지식입니다.
- 부모위주로 개발을 진행하고 싶을 때 영속성전이 사용
- @ManyToOne 또는 @OneToMany 의 속성에 Cascade 속성을 넣는다고 해서 DB 테이블생성쿼리에 별도의 설정이 추가되는 것은 아님
- 즉, 어플리케이션측 설정이라 설정 덕분에 연관된 자식 엔티티에 대한 저장, 삭제쿼리가 추가적으로 질의됨(부모엔티티에 대한 쿼리와 함께).
질문1.
FK 생성시 on update/delete 옵션이 있습니다.(https://h5bak.tistory.com/125 )
영속성전이를 공부하면서 jpa의 cascade속성명과 유사한 TABLE FK의 on update/delete 옵션기능을 알게됐습니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
|
CREATE TABLE `member` (
`member_id` BIGINT(20) NOT NULL,
`username` VARCHAR(255) NULL DEFAULT NULL COLLATE 'utf8mb3_general_ci',
`team_id` BIGINT(20) NULL DEFAULT NULL,
PRIMARY KEY (`member_id`) USING BTREE,
INDEX `FKcjte2jn9pvo9ud2hyfgwcja0k` (`team_id`) USING BTREE,
CONSTRAINT `FKcjte2jn9pvo9ud2hyfgwcja0k` FOREIGN KEY (`team_id`)
REFERENCES `AAA`.`team` (`team_id`)
ON UPDATE RESTRICT ON DELETE RESTRICT
)
;
|
cs |
ON UPDATE / ON DELETE 외래키 옵션으로는 restrict / cascade / set null / no action 이 있습니다.
위 옵션들은 외래키를 갖는 다쪽(자식쪽)에 설정할 수 있는 옵션입니다.
위 4가지 옵션을 JPA 어노테이션으로 셋팅이 가능한지 궁금합니다.
질문2.
책과 강의에서는 영속성전이에 대해서 @OneToMany위주로 설명이 진행됐습니다.
저는 책 p.173상단표에 있듯 @ManyToOne에 cascade속성을 이용해보는 방식도 궁금해졌습니다.
하지만 이내 "특정 자식객체A를 삭제했다고 부모객체를 삭제하면 같은 부모를 둔 다른 자식객체B,C,D
입장에서 말이 안되는 상황" 이라고 생각이 들었습니다.
@OneToMany의 cascade속성을 실습하려면 자식, 부모의 상황을 어떻게 고려해야하는지 조언을 구하고 싶습니다.
선생님, 죄송하게도 질문2에 대해 오타가 있었습니다. @ManyToOne으로 정정하며 말씀드리고 싶습니다.
답변주신 내용도 @ManyToOne이라 간주를 하시고 작성하신건지요?
만약 선생님께서 @ManyToOne일 경우에도 단일소유일 때가 적절한 상황이라 말씀하신거라 가정하고 고민을 해봤습니다.
Attach(첨부파일) 1개는 Post(게시글) 한 곳에 단일소유가 되는데
첨부파일A,B,C가 있는 게시글J 에서 A파일을 지웠다고 글을 지워버리는 시도를 하면 문제가 발생할 것입니다. 첨부파일 테이블의 B, C레코드가 게시글테이블 J레코드를 외래키로 잡고 있기 때문에 J레코드를 삭제하려는 시도에 에러가 나기 때문입니다.
질문1에 대한 답변 감사드립니다!