Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- Error creating bean with name
- jpa회원가입
- Q 클래스
- queryDSL
- REST란
- 스프링 부트 공식 문서
- 스프링 부트 기능
- Unsatisfied dependency
- 1차캐시
- JoinColumn
- JPA주의사항
- Spring Spring boot 차이
- 스프링부트오류
- 복합키
- jpa에러
- json
- github
- 인텔리제이
- git
- uncheck Exception
- json gson 차이
- jwt메서드
- ERD 작성
- Filter
- 최종 프로젝트
- JPA
- spring서버
- 빈생성안됨
- @IdClass
- REST API 규칙
Archives
- Today
- Total
Everyday Dev System
JPA의 엔티티는 왜 기본 생성자가 있어야 할까? 본문
All persistent classes must have a default constructor (which can be non-public) so that Hibernate can instantiate them using Constructor.newInstance(). It is recommended that you have a default constructor with at least package visibility for runtime proxy generation in Hibernate.
한번 빈 생성자를 없애고 실행해봤다.
역시나 안됐다!
JPA(Java Persistence API)에서 @Entity 어노테이션을 사용하여 엔티티 클래스를 정의할 때, 기본 생성자(빈 생성자)가 꼭 필요한 이유가 있습니다.
JPA는 엔티티 객체를 생성하고 관리하기 위해 Java Reflection을 사용합니다. Reflection은 클래스의 인스턴스를 생성하고 속성에 접근하는 등의 동적인 작업을 수행할 수 있는 기능을 제공합니다.
JPA에서 엔티티 객체를 생성할 때, 빈 생성자가 필요한 이유는 다음과 같습니다:
- 프록시(Proxy) 객체 생성: JPA는 지연 로딩(Lazy Loading)과 같은 성능 최적화를 위해 프록시 객체를 사용합니다. 프록시 객체는 실제 엔티티 객체를 대신하여 로딩을 지연시키고, 필요한 시점에 실제 객체를 로딩합니다. 프록시 객체를 생성하기 위해서는 기본 생성자가 필요합니다.
- 엔티티 객체 초기화: JPA는 엔티티 객체를 생성한 후 필요한 초기화 작업을 수행합니다. 예를 들어, JPA 구현체는 엔티티 클래스의 필드 값을 초기화하거나 관계를 설정하는 등의 작업을 수행할 수 있습니다. 이러한 초기화 작업을 위해서는 빈 생성자가 필요합니다.
- ORM 매핑: JPA는 객체와 데이터베이스 간의 매핑을 수행합니다. 엔티티 클래스의 필드와 데이터베이스 테이블의 컬럼을 매핑하기 위해, JPA는 리플렉션을 사용하여 엔티티 객체를 생성하고 값을 설정합니다. 이를 위해서는 빈 생성자가 필요합니다.
따라서 JPA에서 @Entity 어노테이션이 적용된 클래스는 기본 생성자(빈 생성자)를 가져야 합니다. 기본 생성자를 직접 정의하지 않을 경우에는, Java 컴파일러가 자동으로 매개변수가 없는 기본 생성자를 생성합니다. 그러나 엔티티 클래스에 다른 생성자가 정의되어 있는 경우에는, 명시적으로 기본 생성자를 추가해야 합니다.
기본 생성자는 JPA에서 엔티티 객체의 생성과 초기화에 필요한 중요한 역할을 수행하므로, 엔티티 클래스에 빈 생성자를 추가해야 합니다.
references :
https://prolog.techcourse.co.kr/studylogs/2489
우아한테크코스 학습로그 저장소
우아한테크코스 크루들이 배운 내용을 기록하는 학습로그 저장소입니다.
prolog.techcourse.co.kr
'나의 호기심' 카테고리의 다른 글
AWS의 ELB, ALB, CLB, NLB 란? (0) | 2023.07.28 |
---|---|
SimpleJpaRepostory 내부 뜯어보기 (0) | 2023.07.26 |
HttpHeaders는 MultiValueMap의 구현체이다? (0) | 2023.07.11 |
스프링 부트에서 MockMvc를 사용하여 HTTP API 테스트하기 (0) | 2023.07.10 |
Local Storage 와 Session Storage (0) | 2023.06.22 |