Notice
Recent Posts
Link
Tags
- sql
- Git
- mysql
- 스프링부트
- java
- Django
- AWS
- SSL
- nginx
- string
- spring security 6
- 데이터베이스
- 자바
- spring boot
- ORM
- 문자열
- spring mvc
- springboot
- 1차원 배열
- 스프링
- jpa
- DI
- spring
- select
- PYTHON
- 프로그래머스
- session
- Docker
- @transactional
- join
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
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 > Spring' 카테고리의 다른 글
[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 |
[Spring Security] 토큰 기반 로그인/로그아웃 구현하기 (0) | 2024.06.08 |
Comments