Notice
Recent Posts
Link
Tags
- nginx
- spring
- @transactional
- SSL
- 스프링부트
- PYTHON
- DI
- spring security 6
- Django
- Docker
- string
- select
- ORM
- 자바
- 1차원 배열
- 문자열
- hibernate
- spring boot
- AWS
- join
- mysql
- java
- static
- springboot
- sql
- 데이터베이스
- jpa
- 스프링
- 프로그래머스
- spring mvc
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Archives
개발하는 자몽
[JPA] 임베디드 타입(@Embeddable, @Embedded)에 관하여 본문
@Embeddable, @Embedded
- `@Embeddable` 애노테이션이 있는 클래스는 기본 생성자가 필요함
- 임베디드 타입은 값 타입에 속하는데, 이러한 값 타입은 여러 엔티티에서 공유하면 side effect를 일으킬 수 있다.
- 따라서 불변 객체(Immutable Object)로 설정하여 이러한 문제를 방지하는 것이 좋다.
- `@Embeddable` 클래스에 수정자(setter)를 생성하지 않고 생성자만 두어, 생성자로만 값을 설정하게 한다
- 수정자가 없으므로 해당 임베디드 값 타입을 필드로 갖고 있는(@Embedded) 엔티티에서는 특정 값만 수정하는 것이 불가능. 객체를 새로 생성해야 함.
public static void main(String args[]) {
Address address = new Address("city", "zipcode"); //임베디드 값 타입
Member member = new Member(); // 멤버 엔티티
member.setAddress(address);
//만일 address의 city 값을 수정하고 싶다면 아래와 같이 해야함
Address newAddress = new Address("newCity", "zipcode"); //새로운 객체
member.setAddress(newAddress);
//Address 클래스에는 수정자가 없고 생성자만 존재하므로, 특정 값만 수정하고 싶어도 위와 같이 새로운 객체를 생성해야 함
}
'Java & Kotlin > Spring' 카테고리의 다른 글
[Spring Data JPA] 하이버네이트 Batch Size (0) | 2024.11.25 |
---|---|
[JPA Error] No EntityManager with actual transaction available for current thread - cannot reliably process 'flush' call (0) | 2024.10.23 |
[Spring Boot / Error] Required request body is missing (0) | 2024.07.13 |
[Spring Security] 예외 처리하기 (0) | 2024.06.21 |
[Spring Security] 역할/권한 구현하기 (0) | 2024.06.14 |
Comments