본문 바로가기

Spring/JPA, Hibernate

(5)
Entity Inheritance in Hibernate - (3) Table per Class, Joined 상속 전략 Table Per Class 전략 Table-Per-Class 상속 전략을 사용할 때 Database에 생성되는 Table들은 이전 포스팅에서 소개했던 MappedSuperClass의 경우와 유사하다. 하지만 MappedSuperClass 전략을 사용할 때와는 달리 부모 Class가 다른 Entity Class와 Relation을 가지는 것을 지원하며, 이런 Relation이 Child Entity Class에 상속된다는 점이 다르다. 개념적으로 도식화 하면 과 같다. 부모 Class인 Product class와 Beverage Class가 Table로 생성되지는 않지만, 그 Class에서 정의된 attribute들은 모두 Child Entity Class에 상속되게 된다. 구현 과 같이 앞선 포스팅에서..
Entity Inheritance in Hibernate - (2) Single-Table 상속 전략 Overview Single-Table 상속 전략은 상속 관계에 있는 Entity를 모두 묶어서 하나의 Table로 만드는 방식이다. 이전에 사용한 예제를 Single-Table 상속전략을 사용했을 경우를 개념적으로 도식화 하면 과 같다. 최상위 Class인 Product Class가 모든 Child Class를 포함하는 상태로 Table이 만들어지며 다른 Entity Class와의 Relation도 이 Class에서 처리된다. 모든 상속 관계가 한 Table로 모이는 Diagram Single-Table 상속 전략이 가지는 장, 단점은 아래와 같다. 장점 상속 관계에 있는 Entity 관리 편의성과 높은 성능 다른 Entity들과의 Relation 설정 용이 단점 상속 관계에 있는 모든 Entity가 ..
Entity Inheritance in Hibernate - (1) MappedSuperClass 전략 ORM(Object-Relational Mapping), JPA(Java Persistence API), Hibernate 간단하게 3개에 대해 언급하자면... ORM : Class와 DB Table Mapping. 즉, 하나의 Class를 DB의 Table로 Mapping 해서 Code로 DB Table을 관리하고 Query할 수 있게 하는 기술이다. JPA : Java에서 ORM 기술을 표준화한 API 명세이다. Hibernate : JPA에서 정의한 API명세를 구현한 구현체이다. (Hibernate외에도 몇 가지 구현체가 더 있지만 최근에는 Hibernate가 defacto standard가 됨.) Inheritence in JPA Java의 Class가 가지는 특징 중에 하나는 '상속(Inher..
JPA/Hibernate + PostgreSQL 환경에서 Entity ID 자동 생성 들어가며 JPA/HIbernate를 이용해서 Entity를 정의할 때, DB에서 Primary Key로 사용될 Field도 여기서 정의한다.Primary Key로는 이름이나 일련 번호와 같이 의미가 있는 값을 사용할 수 있지만, 자동으로 생성되는 값을 이용할 수도 있다. 이를 'JPA 자동키 생성', 'JPA 기본키 자동생성' 등으로 부르고 있으며, 여기에 그 내용을 잘 정리해 놓았으니 참고하면 좋을 것 같다. JPA/Hibernate에서 제공하는 자동 키 생성 전략에 대해서 저 Posting에서 거의 모두 설명하고 있는데, 다만 MySQL을 예로 사용하고 있어서 여기서는 PostgreSQL을 이용했을 때 어떻게 동작하는 지를 정리해 보았다. Case 1. Primary Key를 UUID로 사용하는 경우..
Spring Boot + JPA/Hibernate + Liquibase Project 구성 (feat. PostgreSQL) 나이가 들어가면서 기억력이 떨어지는 것이 느껴져서 Spring 프로젝트의 많은 Property들 중 자주 사용하는 것 위주로 내용을 한 번 정리하고자 포스팅을 쓴다 개발 환경 OpenJDK v1.8.0_212 Spring Boot 2.1.4 (Hibernate 5.3.9, HikariCP 3.2) liquibase 3.6.3 lombok-1.18.16 PostgreSQL 11 (Postgresql JDBC Driver : postgresql-42.2.5) Gradle build.gradle Spring Initializer를 통해 jpa, liquibase, postgresql을 Dependencies로 설정해서 Gardle Project를 생성했다. (이 화면에는 없지만 lombok도 dependanc..