📕🐘 도로락 - 코끼리를 냉장고에 넣는 방법

# Hibernate (6)

JPA - Hibernate 2019. 3. 12. 10:23

[JPA] xxx.Hobbies is not mapped as an embeddable 오류 발생 원인 및 해결 방법

JPA - Hibernatexxx.Hobbies is not mapped as an embeddable 오류 발생 원인 및 해결 방법보통 주소나 취미 등 의미는 비슷하나 여러개의 컬럼으로 나누어서 사용하는 경우에는 하나의 엔티티에 모든 필드를 설정하기 보다는 하나의 Embedded Value로 만들어 관리합니다.예를 들어 사용자를 관리하는 user 테이블이 있고 사용자의 취미를 세개까지 입력할 수 있도록 설계하였다고 할 때 테이블은 다음과 같은 모습일 것입니다.그런 경우 작성된 엔티티는 다음과 같을 것입니다.@Entity@Table(name = "user")public class User { @Id private String email; private String name; priv..

JPA - Hibernate 2018. 7. 28. 02:30

[JPA] 식별자 할당 SEQUENCE(시퀀스) 사용 전략

JPA 식별자JPA는 엔티티들을 논리적인 공간인 영속성 컨텍스트에서 관리하는데, 엔티티를 구분할 수 있는 식별자가 필요합니다. 식별자가 되는 필드는 엔티티 클래스의 @Id 애노테이션을 통해 지정할 수 있습니다.엔티티가 영속성 컨텍스트에 들어가 JPA에 관리되는 시점에는 반드시 식별자로 지정된 필드에 식별자 값이 할당되어 있어야 합니다.SEQUENCE(시퀀스) 전략JPA에서 엔티티에 식별자를 할당하는 방법은 여러가지가 있지만 그 중 Oracle, DB2, H2, PostgreSQL 등에서 사용할 수 있는 시퀀스 기능을 활용한 SEQUENCE 전략이 있습니다. SEQUENCE 전략은 DB에서 시퀀스 기능을 지원해야만 사용가능한 전략이므로 DBMS에 종속적인 식별자 할당 전략입니다.다음과 같이 user 테이블..

JPA - Hibernate 2018. 7. 22. 23:41

[JPA - Hibernate] Dialect(방언)이란? 하이버네이트 Dialect 종류

Dialect(방언)이란? 표준 ANSI SQL과 방언 SQLSQL은 다음과 같이 표준 SQL인 ANSI SQL이 있으며, ANSI SQL 이외에 각 DBMS Vendor(벤더, 공급업체)인 MS-SQL, Oracle, MySQL, PostgreSQL 에서 자신만의 기능을 추가한 SQL이 있습니다. ANSI SQL이 모든 DBMS에서 공통적으로 사용가능한 핵심 표준 SQL이지만, 여러 제품의 DBMS에서는 자신만의 독자적인 기능을 위해서 추가적인 SQL을 만들었습니다.예를 들어 MS-SQL의 T-SQL 그리고 Oracle의 PL/SQL이 대표적입니다. 또한 기본키를 할당하는 방법에도 MySQL의 경우는 AUTO_INCREMENT 라는 기능과 오라클 DB에는 시퀀스라는 기능이 있습니다. 이것은 마치 대한민..

JPA - Hibernate 2018. 7. 21. 23:28

[JPA] 엔티티 식별자 DB에서 할당받기. @GeneratedValue와 GenerationType.IDENTITY 전략.

이전글[JPA] 엔티티 식별자 직접 할당하여 저장하기엔티티 식별자JPA는 엔티티를 관리하는 영속성 컨텍스트라는 공간이 있고 persist()를 통해 이곳에 저장된 엔티티 객체들은 JPA의 관리 대상이 됩니다. JPA의 관리 대상이 되었다는 것은 엔티티의 상태가 변경되면 DB에 해당 엔티티에 대한 데이터가 JPA가 생성한 쿼리에 의해 UPDATE 되어진다는 뜻이며, EntityManager를 통해 삭제, 삽입, SELECT 되어진다는 뜻입니다.그런데 JPA는 영속성 컨텍스트에서 관리되는 엔티티 객체들을 구분할 필요가 있는데, 이때 필요한 것이 식별자입니다. 식별자로 지정되는 속성은 @Id 애노테이션이 맵핑되어 있어야 합니다. 또한 속성에 맵핑되는 DB 테이블의 컬럼은 UNIQUE한 컬럼이어야 합니다. 즉 ..

JPA - Hibernate 2018. 7. 20. 22:47

[JPA] 엔티티 식별자 직접 할당하여 저장하기

엔티티 식별자JPA는 엔티티를 관리하는 영속성 컨텍스트라는 공간이 있고 persist()를 통해 이곳에 저장된 엔티티 객체들은 JPA의 관리 대상이 됩니다. JPA의 관리 대상이 되었다는것은 엔티티의 상태가 변경되면 DB에 해당 엔티티에 대한 데이터가 JPA가 생성한 쿼리에 의해 UPDATE 되어진다는 뜻이며, EntityManager를 통해 삭제, 삽입, SELECT 되어진다는 뜻입니다.그런데 JPA는 영속성 컨텍스트에서 관리되는 엔티티 객체들을 구분할 필요가 있는데, 이때 필요한 것이 식별자입니다. 식별자로 지정되는 속성은 @Id 애노테이션이 맵핑되어 있어야 합니다. 또한 속성에 맵핑되는 DB 테이블의 컬럼은 UNIQUE한 컬럼이어야 합니다. 즉 데이터가 중복되거나 NULL이 허용되는 컬럼이어서는 안..

JPA - Hibernate 2018. 7. 5. 05:00

[JPA] @Id 애노테이션 필드 또는 메서드에 적용시 동작 차이점

@Id 애노테이션@Id 애노테이션은 JPA 엔티티 객체의 식별자로 사용할 필드에 적용하며, 유니크한 DB의 컬럼과 맵핑하는 것이 보통입니다.@Id 애노테이션 적용 위치@Id 애노테이션은 다음과 같이 필드에도 적용할 수 있고 자바빈 규약에 맞게 작성된 getter 메서드에도 적용할 수 있습니다.필드에 적용하는 경우@Entity@Table(name = "user")public class User { @Id private String id; @Column(name = "user_name") private String name;}getter 메서드에 적용하는 경우 @Id public String getId() { return id; }적용 위치에 따른 JPA 동..