반응형
해당 강의는 코드 위주로 진행됩니다. 실질적인 객체 처리를 담당하는 코드는 링크에서 확인하시길 바랍니다.
* AttributeConverter
- 매핑을 지원하지 않는 자바 타입과 DB 타입 간 변환 처리를 담당한다.
- ex) boolean 타입을 char 타입으로 매핑하고 싶을 때
- open_yn (char)를 opened (boolean)에 매핑하고 싶다. 이걸 AttrivuteConverter가 해준다.
- AttributeConverter를 구현한 클래스를 먼저 만든다.
- AttributeConverter에는 convertToDatabaseColumn() 과 convertToEntityAttribute()가 정의되어 있다.
- convertToDatabaseColumn() : 엔티티 속성을 DB 칼럼 값으로 바꿔준다.
- convertToEntityAttribute() : DB칼럼 값을 엔티티 속성으로 변환해준다.
- 위 두 메서드를 구현하면 된다.
- convertToDatabaseColumn() : 엔티티 속성이 true 면 DB 에 "Y"를 넣는다. false면 "N"을 넣는다.
- convertToEntityAttribute() : DB 값이 Y 면 엔티티 속성은 true, Y가 아니면 false가 된다.
- 이후 엔티티 매핑을 할 때, @Convert 애너테이션을 붙이고 해당 애너테이션에 구현 컨버터로 타입을 지정해준다.
* @Formula
- SQL의 실행 결과를 특정 속성에 매핑하고 싶을 때 사용한다.
- 주로 조회를 위한 매핑 처리를 할 때 사용한다. (INSERT, UPDATE 쿼리의 결과는 매핑 대상에 포함되지 않는다)
- 하이버네이트에서 제공하는 기능이다.
- 주로 DB 함수를 호출한 결과, 서브 쿼리의 결과를 매핑할 때 사용한다.
- categoryName 속성은 category 테이블 중 cat_id가 cat 인 엔티티의 name과 매핑된다.
* 수정 쿼리의 칼럼
- 수정 쿼리는 기본적으로 모든 칼럼을 포함한다.
- notice 객체를 가져와서 open()을 수행하면 notice 객체 내의 opend 속성이 true로 바뀐다.
- 그러면 UPDATE 쿼리에는 모든 칼럼이 수정 대상으로 포함된다.
- 경우에 따라서는 실제로 수정된 칼럼만 UPDATE 쿼리에 넣고 싶을 수 있다. 이는 @DynamicUpdate로 해결한다.
* @DynamicUpdate / @DynamicInsert
- @DynamicUpdate : 변경된 칼럼만 UPDATE 쿼리에 포함시킨.
- @DynamicInsert : null이 아닌 칼럼만 INSERT 쿼리에 포함시킨다.
- 주의 : 디폴트값이 있는 칼럼에 null을 넣고 싶어도 null은 INSERT 쿼리에 추가되지 않으니 뜻하지 않게 디폴트값이 입력될 수 있다. 즉, null을 지정해야 하는 경우에는 사용하지 말자.
- Notice클래스에 @DynamicUpdate 애너테이션을 붙이고 Notice#open()을 사용하면 UPDATE 쿼리에 open_yn 칼럼 값만 해당된다.
* @Immutable
- 해당 엔티티를 변경 추적 대상에서 제외한다.
- 변경 추적을 위한 메모리 사용이 감소한다.
- 주로 조회의 목적으로만 사용되는 엔티티를 매피할 때 사용된다.
- @Immutable이 적용된 엔티티도 저장은 된다.
- 코드 수준에서 persist()하지 않도록 주의하자.
- 클래스에 애너테이션을 붙인다. 당연하지 엔티티 다루는 거니까.
* @Subselect
- SELECT 쿼리의 결과를 엔티티로 매핑할 때 사용한다.
- 수정 대상이 아니므로 @Immutable과 함께 사용한다.
- 테이블과 1대1 매핑이 아닌, 뷰처럼 SELECT한 결과를 매핑하는 것이기 때문이다.
- @Subselect에 넘어간 SELECT 쿼리의 결과로 나온 테이블을 ArticleListView와 매핑한다.
- ArticleListView에서 SELECT 를 하면, ArticleListView에 붙은 SELECT를 FROM으로 감싸서 만든 테이블에서 SELECT를 한다.
* 기타
- 상속 매핑
- 네이티브 쿼리
- 하이버네이트 애너테이션
- @CreationTimestamp
- @UpdateTimestamp
반응형
'Programming > JPA & Spring Data JPA 기초' 카테고리의 다른 글
22. 리포지터리 메서드 작성 규칙 (0) | 2023.04.07 |
---|---|
21. Spring Data JPA 시작하기 (0) | 2023.04.06 |
19. Criteria 소개 (0) | 2023.04.04 |
18. JPQL 소개 (0) | 2023.03.30 |
17. 영속성 전파 & 연관 매핑 고려사항 (0) | 2023.03.29 |
댓글