Lewis's Tech Keep
[JPA] 엔티티가 final이 될 수 없는 것에 대하여 본문
JPA를 하면서 좀 불만아닌 불만이랄까...
불변성 보장을 하고 싶은데 final을 쓸 수 없는 모순에 자꾸 부딪히게 된다.. (참고 링크)
일단 왜 final을 이용해 불변 객체로 만들고 싶은가 하면
특히 진행 중인 사이드 프로젝트에 web-flux 를 사용하려고 생각하고 있었는데,
web-flux는 리액티브 웹 프레임워크이며 논블로킹 리액티브 스트림을 이용하게 될 것이기 때문에 불변임을 보장하여 좀 더 안정적인 프로그램을 만들고 싶었다.
불변 객체 일 때 장점
- https://mangkyu.tistory.com/131
JPA final class 불가능한 이유
hibernate에서 lazy load 시 기존 엔티티를 extends 하는 것을 볼 수 있는데 final class를 선언한다면 이를 할 수 없게 된다.
- https://www.baeldung.com/hibernate-proxy-load-method
여기서 조금 의문인 점.. -> 그렇다면 lazy load 가 아닌 경우에는 왜 괜찮을까???
- 괜찮다고 하는 글은 꽤 있음 그렇지만 프록시 객체를 생성하는 시점에서 final이 괜찮을 수 있나? -> 조사 중
- https://docs.jboss.org/hibernate/orm/5.0/mappingGuide/en-US/html/ch02.html
JPA final field 가능한 지
- 가능하기는 하지만 엔티티는 변할 수 있고 이를 수정하지 않는다고 가정할 시 reflection 을 이용해 수정한다고 되어 있다. 퍼포먼스 이슈 있을 수 있음.
- https://stackoverflow.com/questions/2455906/persistence-provider-for-java-that-supports-final-fields
'Java > JPA' 카테고리의 다른 글
[JPA] JPA Repository interface는 왜 @Repository 없이도 작동할까? (0) | 2021.11.13 |
---|---|
[JPA] 객체 그래프 탐색 (0) | 2021.11.12 |