본문 바로가기
Java/JPA

[SpringBoot_JPA_1] JPA Entity Default Constructor

by HJ0216 2023. 5. 23.

이 글은 김영한의 [실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발] 수강하며 정리한 글입니다.

 

 

🟦 기본 환경: IDE: IntelliJ, Language: Java

 

 

매개변수가 있는 생성자를 사용할 경우, 기본 생성자가 자동으로 만들어지지 않음

 

🚨 JPA에서 Entity 생성 시, 매개변수가 있는 생성자를 만들 경우, 기본 생성자를 필수적으로 기재해야함

→ JPA는 DB 값을 객체 필드에 주입할 경우, "기본 생성자"로 객체를 생성한 이후 "Reflection API"를 사용하여 값을 매핑

Reflection API는 생성자의 인자정보는 갖고 올 수 없으므로 매개변수가 있는 생성자 작성 시, 기본 생성자를 작성하여 객체를 생성할 수 있는 환경을 제공해야 함

 

 

⭐ Reflection API: 클래스 타입을 알지 못하더라도 해당 클래스의 메소드, 변수들에 접근할 수 있도록 해주는 API

 

Example class의 Type을 단순히 Object로 선언할 경우, getter 함수를 사용할 수 없으나, Reflection API 사용 시 가능

1. Class cls = Example.class;: Example 클래스의 Class 객체 생성

2. Method getExample = cls.getMethod("getExample");: cls 객체에서 "getExample"이라는 이름을 가진 메서드 호출

3. String title = (String) getExample.invoke(example, null);

  3.1. getExample 메서드를 호출
  3.2. invoke 메서드를 사용하여 메서드를 실행하고 결과를 반환
    - example: Example 클래스의 인스턴스
    - null: 메서드에 전달할 인자 없음
  3.3. 반환된 결과를 String으로 캐스팅하여 result 변수에 할당

 

 

 

+📚 추가로 공부해볼 것: 기본 생성자 선언 시, protected, public만 가능한 이유

 

참고 자료

 

JPA Entity 생성자에 관하여

JPA 에서 기본 생성자가 필요한 이유와 private 으로 선언하면 안되는 이유에 관하여

velog.io

 

Spring, JPA에 기본 생성자가 필요한 이유

인프런에서 김영한님의 강의를 들으면서 “JPA의 Entity객체에는 기본 생성자가 있어야 한다” 라는 말을 들은적이 있다.왜 그런 걸까? 알아보도록 하자.위의 이유를 알기 위해서는 먼저 java Reflect

velog.io

 

'Java > JPA' 카테고리의 다른 글

[SpringBoot_JPA_1] Cascade Type  (0) 2023.05.25
[SpringBoot_JPA_1] FetchType.LAZY, EAGER  (0) 2023.05.25
[SpringBoot_JPA_1] @JoinTable  (0) 2023.05.23
[SpringBoot_JPA_1] @Enumerated  (0) 2023.05.23
[SpringBoot_JPA_1] @Inheritance @DiscriminatorColumn  (0) 2023.05.22