1. 식별관계와 비식별관계
https://www.erdcloud.com/ 여기서 ERD를 그리는데
관계를 추가할때 Identifying Relationship, Non Identifying Relationship가 확실히 구분이 안 가서 찾아봤다.
Non Identifying Relationship: 비식별관계 (점선으로 표시)
- 자식테이블의 일반 속성을 부모가 외래키로 사용하는것이다.
- 즉, 자식 entity는 부모의 존재여부와 상관없이 독립적으로 존재할 수 있다. ( 데이터를 자유롭게 수정할 수 있다)
- 부모가 없어도 자식이 존재할 수 있어 데이터 무결성이 보장되지 않아서 별도의 로직이 필요하다.
Identifying Relationship : 식별 관계 (실선으로 표시)
- 부모테이블의 기본키나 복합키가 자식테이블의 기본키나 복합키의 구성원으로 전이되는 관계이다.
- 그래서 부모 데이터가 존재해야만 자식 데이터가 존재할 있다.
그래서 해당 관계를 사용하면 자식이 부모의 키를 저장하고 후에 다른 테이블 해당테이블을 식별관계로 지정하면 계속해서 키가 늘어난다.(아래의 사진에서 comment테이블을 보면 post와 관계를 맞으면 자동으로 포스트의 복합키인 board_id도 키로 가지는 것을 확인할 수 있다.)
https://deveric.tistory.com/108(여기 좋아요)
https://linuxism.tistory.com/m/512
2. 생성과 동시에 시간을 지정하는 법
원래 기존에는 @CreationTimestamp, @UpdateTimestamp 어노테이션을 이용해서 시간을 자동으로 저장하였는데
@PrePersist 어노테이션을 알게 되었다.
@PrePersist는 JPA에서 제공하는 어노테이션으로 개발자가 직접 메서드를 작성하여 영속화되기 전에 실행되는 메서드에 붙어 실행된다는 것을 알게 되었다.(저장시점에 실행되는 메서드) 이를 활용해서도 시간 입력이 가능하다.
보통은 자동으로 입력하는 @CreationTimestamp를 활용하고 특별한 비스니스 로직에 따라 저장되어야 하는 경우에는 @PrePersist를 이용하여 저장한다. 또한, @PreUpdate를 활용하여 업데이트 시점 이전에도 실행되어야 하는 메서드를 지정할 수 있다.
@PreUpdate,@PrePersist 어노테이션은 JPA라이프 사이클 어노테이션으로 엔티티의 상태 변화에 따라 라이프 사이클 콜백 메서드를 정의할 수 있다.
'2023' 카테고리의 다른 글
[0406] (0) | 2023.04.07 |
---|---|
[0405] TIL (0) | 2023.04.06 |
[0404] TIL (0) | 2023.04.05 |
Stomp convertAndSend (0) | 2023.04.02 |
[TIL] stomp origin문제, socket에서의 JWT 처리 (0) | 2023.03.24 |
댓글