본 글은 Spring Boot 2.7.13(Java 17), Hibernate 5.6.15 기준으로 작성됨
JPA에서 ID를 커스텀하게 만들 때 IdentifierGenerator, Configurable를 implements 받아서 ID생성기를 구현한다.
구글링을 하다보면, session.connection();이나 session.getJdbcConnectionAccess().obtainConnection();를 사용해서 DB connection을 가져온다.
session.connection()과 session.getJdbcConnectionAccess().obtainConnection()는 뭔 차이일까?
1단계 일단, 둘 다 디버깅 걸어보자
session.connection()
session.getJdbcConnectionAccess().obtainConnection()
2단계, 문서와 코드를 까보자
session.connection()
하이버네이트가 관리하는 JDBC 커넥션
session.getJdbcConnectionAccess().obtainConnection()
getJdbcConnectionAccess에 해당하는 JdbcConnectionAccess 인터페이스에 보면,
/**
* Provides centralized access to JDBC connections. Centralized to hide the complexity of accounting for contextual
* (multi-tenant) versus non-contextual access.
*
* @author Steve Ebersole
*/
public interface JdbcConnectionAccess extends Serializable {
파파고를 통하면,
중앙 접근이 가능한 JDBC
어떤 걸 써야 하지...??
datasource를 빈으로 등록해서 스프링 서버를 구동하면, 둘 다 문제없는 소스다.
하지만, hibernate가 관리하는 JDBC보단 중앙 접근 가능한 방식이 조금 더 좋은 코드로 보인다.
추가로, Jboss 사이트의 hibernate문서를 보면, connection()은 4.x버전부터 제거예정이라고 명시했다.
제거될 함수보다는 session.getJdbcConnectionAccess().obtainConnection()를 쓰는 것이 좋을듯하다.
여담...
'개발 고민' 카테고리의 다른 글
단일 책임 원칙과 클린코드 V2 (0) | 2023.08.09 |
---|---|
MultipartFile 업로드에 관하여 (0) | 2023.05.30 |