본문 바로가기
728x90

jpa4

[JPA] 일급 컬렉션에서 @ManyToOne 사용하기 안녕하세요. 오늘은 코드를 작성하던 중 바보같은 생각을 했던 경험을 공유하려고 합니다. 일급 컬렉션은 Collection객체를 감싸면서 다른 변수가 없는 클래스입니다. 특정 클래스에 List나 Set같은 Collection 변수를 가지고 있을 때, 이들을 하나의 클래스로 만들어서 사용합니다. 일급 컬렉션에 대한 자세한 내용은 이곳을 참고하시기 바립니다. 일급 컬렉션을 만듦으로서 다음과 같은 이점을 가지게 됩니다. 비즈니스에 종속적인 자료구조 Collection의 불변성 보장 상태와 행위를 한곳에서 관리 이름이 있는 컬렉션 하나씩 검증하도록 하겠습니다. 예를들어 여러 지하철역을 가지는 노선에서 마지막 역을 구하는 테스트를 해보겠습니다. 마지막역을 구할 때는 다음과 같은 조건을 가집니다. 노선의 역의 개수는.. 2021. 3. 13.
[JPA] 상속관계 매핑 관계형 데이터베이스는 상속관계 x 부모만 @Id를 가진다, @Entity는 모두 가진다 슈퍼타입, 서브타입이 객체 상속과 비슷하다 전략 조인전략 : 각각의 테이블을 조인 테이블 정규화 외래키 참조 무결성 제약조건 활용 가능 저장 공간 효율화 조회시 조인 사용하여 성능저하 데이터 저장시 Insert 쿼리 두번 이상 사용 정석!!!, 설계 깔끔!!!, 조인만 잘하면 되지!!! 중요하고 복잡한 비즈니스 로직!!! 단일테이블 전략 : 통합 테이블에서 단일 테이블로 = 성능좋다 조인이 없어서 빠른 성능 단순한 조회쿼리 자식 엔티티가 매핑한 컬럼은 모두 null 허용 테이블이 커질 수 있다 ⇒ 조회가 느려질 수도 있다 확장 가능성 없을 때!!! ~~클래스마다 테이블 전략 :구현 클래스마다 테이블~~ 슈퍼클래스 : .. 2021. 3. 4.
[JPA] 엔티티타입 vs 값타입 종류 엔티티 타입 @Entity PK를 가진다 데이터가 변해도 식별자로 계속 추적가능한 것 값 타입 int, string... PK가 없다 (값 그 자체이므로...) 기본값 타입 (int, Integer, String...) 임베디드 타입 (사용자가 정의한다) 컬렌션 타입 (사용자가 정의한다) 1. 기본값 int, String 등의 기본타입 절대 공유되어서는 안되고 복사만 가능 immutable해야한다 2. 임베디드 타임 class Line { @Embedded private Sections sections; } @Embeddable class Sections { private List sections } embed된 객체의 멤버만 가져와서 사용 그냥 엔티티의 값이다 장점 재사용 가능하다 응집도가 높아진.. 2021. 3. 3.
스프링부트 @CreatedDate 직접 만들어 보기 오늘은 Entity를 데이터에 저장 시, 시간 정보를 자동으로 입력해주는 @CreatedAt를 직접 구현해보았습니다. 순수 도메인 로직의 테스트 코드를 작성하면서 Entity 객체에 @CreatedDate가 있는지 모르고 객체를 생성하여 null을 보고선 문득 내부적으로는 어떻게 동작을 하는지 궁금해졌습니다. 소스코드는 github에서 찾으실 수 있습니다. 1. 코드 검색을 해본 결과 stack overflow에서 원하던 답변을 찾을 수 있었습니다. 결론만 말하자면, Entity가 영속성 컨테스트에 의해 저장되기 전에 @PrePersist라는 콜백에 의해 객체에 직접 날짜를 입력하는 방법을 사용하고 있었습니다. 코드를 보면 아래와 같습니다. 먼저 Person이라는 클래스를 생성합니다. @ToString .. 2021. 1. 26.
728x90