728x90
엔티티에서 setter를 쓰는 것보다 생성자를 통해 파라미터를 넘기는 게 좋다.
Setter를 무분별하게 남용하다 보면 여기저기서 객체(엔티티)의 값을 변경할 수 있으므로 객체의 일관성을 보장할 수 없기 때문. 그리고 setter는 그 의도를 알기 힘들기에 setter 사용을 자제해야한다.
그러므로 protect 생성자를 생성해서 아무데나 생성되는 걸 막는 게 좋다. (다른 사람이 쓰지 못하도록 제약한다.)
예시)
Member member = new member ();
member .setname("민우");
member .setname("하진");
그러나 JPA 표준 스펙에 디폴트 생성자가 있어야하기에 private 생성자를 사용할 수 없다. 왜냐하면 jpa가 프록시 기술을 쓰는데 거기서 프록시 기술을 쓸 때, jpa hibernate가 객체를 강제로 만들어야하는데 private로 만들면 이것이 다 막혀버리기 때문이다. 그래서 protected 생성자를 사용하는 편이다.
protected로 일일이 치는 것보다는
롬복으로 @NoArgsConstructor(access = AccessLevel.PROTECTED). 엔티티 클래스 위에 선언함으로써 간략하게 protected 생성자를 생성할 수 있다.
728x90
'JPA' 카테고리의 다른 글
JSON parse error: Cannot deserialize value of type `enum package` (0) | 2023.08.06 |
---|---|
컬렉션 fetch join 및 페이징 applying in memory 오류 (0) | 2023.08.02 |
Entity를 Dto로 쉽게 변환 및 Entity노출을 최대한 자제해라. (0) | 2023.02.09 |
qlrm 라이브러리와 mariaDB 사용시 주의사항 (0) | 2023.02.07 |
사용자 정의 리포지토리 구성 및 페이징처리 (0) | 2023.01.24 |