JPA가 뭐냐?
JPA(Java Persistence API) 라는 것으로 JAVA진영 ORM 표준 되시겠다.
표준이면 좋겠구나. 올바른 방법이라고 생각했다.
Hibernate는 JPA가 맞는지 의심스럽고, @Transactional 과 같이 사용하면 정말 멋지다.
이것은 필자가 생각하는 지극히 개인적인 Spring Data JPA + Hibernate 사용 소감이다.
(아마도 Hibernate만 직접쓰면 문제는 덜할지 모른다.)
장점
표준 ORM으로써 자바의 철학을 만끽할 수 있다.
SQL작성 전혀없이 CRUD를 구현할 수 있다.(모든 ORM의 장점이다)
단점
실제 사용은 표준이 표준이 아니다. Hibernate와 Spring Data JPA는 이미 표준이상의 기능으로 무장중이고, 이것은 마치 IE의 비표준처럼 느껴진다.
따로 배워야 할게 많다. HQL이라던가, @Transactional(아주 놀라운 어노테이션이지) 이라던가
어렵다. JPA로 최적화된 비즈니스 로직을 구성하는건 정말 어렵다. (자동생성된 SQL은 정말 비효율적이다)
의도하지 않은 SQL이 실행될 수 있다. (아 물론, 잘 사용하면 이런건 방지할수 있을 것이다.. 아주 잘 사용하면....)
자동으로 변경을 감지하여, DB와 동기화 시키는 개념이 의도와는 다르게 동작하기도 한다. (managed entity를 값을 변경하지도 않았는데, 이미 Update문이 돌기도 하고...)
Fetch Lazy는 제약조건이 많아서, 실제로 동작안하는 경우가 많다. (물론 잘쓰면 됨, 그래도 아무런 메세지도 없이 미동작하는건 너무하다)
결론
단점이 많다.
ORM를 쓰고자하거든 Hibernate만 직접 사용하길 추천함