모든 Hibernate 엔터티는 프레임워크 내에서 Transient, Managed, Detached, Deleted 상태의 라이프 사이클을 갖는다HibernateLifecycleUtil.getManagedEntities(session) : 세션 내부 저장소에서 모든
JPA를 사용할 때 엔터티의 수명주기 내에서 몇가지 이벤트를 통지(notify) 받는다.JPA 엔터티 lifecycle 이벤트와 어노테이션으로 콜백을 처리하고 이벤트가 발생했을 때 코드를 실행하는 방법을 논의한다.JPA Entity Lifecycle
SQL 테이블에 직접 정의하는 것과 마찬가지로 엔터티에 기본 속성을 부여하겠다. 엔터티를 생성하는 동안 default 컬럼 값을 지정하는 첫번째 방법은 엔터티의 속성값으로 직접 부여하는 것이다. 이제 new 연산자로 새 엔터티를 생성할 때마다 우리가 부여한 기본 값
@Basic 어노테이션을 살펴보고 @Basic과 @Column JPA 어노테이션의 차이를 논의할 것이다.JPA는 엔터티의 persistable한 필드 타입으로 다양한 Java 자료형을 지원한다. Basic 타입은 데이터베이스의 열에 직접 맵핑된다. 자바 원시 자료형과
ORM에서 데이터를 fetch 또는 load 하는 방식은 크게 eager와 lazy로 나뉜다. Eager and Lazy Loading Eager Loading : 데이터 초기화가 즉석에서(on the spot) 발생하는 디자인 패턴 Lazy Loading : 객체
구현에 따라 JPA의 기본 테이블 이름은 달라진다. 예를 들어, Hibernate에서는 클래스 이름의 첫글자를 대문자로 변경하여 기본 테이블 이름으로 쓴다. 이는 ImplicitNamingStrategy 계약으로 결정된다. PhysicalNamingStrategy 인터
JSR-330의 @Size 어노테이션, Hibernate의 @Length 어노테이션, 그리고 JPA @Column어노테이션의 length 속성에 대해 알아보자. 필드의 크기를 검증할 때 @Size, @Length 어노테이션을 사용할 수 있다. 전자는 JPA 표준 어노테
자바에서는 Object.equals()와 Object.hasCode() 메소드를 오버라이딩하여 동등성(equality)의 정의를 변경할 수 있다. 이를 위해서는 몇가지 고려할 사항이 있다.객체들을 그룹화 하는 것이 Collection이다. grouping 로직에서는 해
예시) 회사 기본 정보와 담당자 정보가 저장되는 company 테이블 정의하기여기서 담당자를 별도의 클래스로 추상화해야 하지만, 세부정보에 대한 별도의 테이블을 만들고 싶지 않다면 다음과 같은 방법을 사용할 수 있다.JPA @Embeddable 어노테이션은 다른 엔터티
JPA 3.0 부터 사용가능한 기능이다. JDBC 타입을 자바 클래스에 맵핑할 수 있다. 아래 예시에서는 Hibernate 6를 사용했다.예시) 나중에 변환될 PersonName 클래스예시) @Entity 어노테이션을 사용하는 클래스에 PersonName 타입의 속성
예시에서 스프링 부트 애플리케이션을 사용할 것이다. 예시) 의존성을 정의하는 pom.xml 파일예시) 샘플 엔터티@NotNull은 Bean Validation 사양에 정의되어 있으며 엔터티에 한정하지 않고 활용할 수 있다. 어떤 빈에서라도 @NotNull을 사용할 수
기본키 제약과 유니크 제약이 어떤 차이를 가지고 있는지 알아보고, JPA의 @Column(unique=true)과 @UniqueConstraint 을 살펴본다. 유니크 키는 테이블의 단일 또는 복수 컬럼으로서 레코드를 식별가능하게 한다. 기본키와 유니크 키는 모두 단일
Serializable은 메소드나 상수가 없는 Marker Interface이다. 객체 직렬화는 자바 객체를 byte 스트림으로 변환하는 과정이다. 직렬화를 거쳐야 persistent 메모리에 이를 저장할 수 있다. 역직렬화는 이와 반대되는 작업이다. 직렬화 인터페이스
사용자 관리 시스템을 빌드할 때 상사가 각 user에 메일 주소를 저장할 것을 요구한다고 가정해보자. user는 단 하나의 address를 가지고 address는 단 하나의 user에 묶일 것이다. user와 address 엔터티 사이는 일대일 관계의 예시이다.일대일