분류 전체보기 283

@OneToMany

일대다 관계를 나타내는데 사용다. 데이터베이스 테이블의 다대일, 일대다 관계에서는 항상 다 쪽이 외래 키를 가진다. JPA에서는 외래키를 가지고 있는 엔티티가 연관관계의 주인이라고 하며 외래키를 관리한다. 주인이 아닌 반대편은 읽기만 가능하고 외래키를 변경하지는 못한다. 속성 기능 기본값 mappedBy 엔티티의 PK가 FK로 사용되고 있는 테이블의 필드명을 지정한다. 연관관계의 주인이 아니라는 설정이기도 하다. 양방향 매핑이 아닌 일대다 단방향 매핑일 경우 필드 위에 @JoinColumn을 명시해야한다. 그렇지 않으면 JPA는 조인 테이블 전략을 기본으로 사용해서 매핑한다. 일대다 단방향 매핑은 객체가 관리하는 외래 키가 다른 테이블에 있기 때문에 성능 문제와 관리의 부담이 있다. 일대다 단방향 매핑 ..

JVM/JPA 2023.06.12

@ManyToOne, @JoinColumn

@ManyToOne 다대일 관계를 나타내는데 사용한다. 속성 기능 기본값 optional false로 설정하면 연관된 엔티티가 항상 있어야 한다. true fetch 글로벌 페치 전략을 설정한다. FetchType.EAGER cascade 영속성 전이 기능을 사용한다. targeEntity 연관된 엔티티의 타입 정보를 설정한다. 제네릭으로 타입 정보를 알 수 있다면 생략해도 된다. FetchType.EAGER 전략 단건 조회시 join 하지만 다건 조회시 N+1 이 발생한다. BatchSize를 조절하거나 JPGL에 fetch join을 사용하자 @JoinColumn 외래 키를 매핑할 때 사용한다. 다대일 관계에서는 생략하여도 조인테이블 전략을 사용하지 않는다. 속성 기능 기본값 name 매핑할 외래 키..

JVM/JPA 2023.06.12

@Access

JPA가 엔티티 데이터에 접근하는 방식을 지정한다. 설정하지 않으면 @Id의 위치를 기준으로 접근 방식이 설정된다. 필드 접근 (권장) AccessType.FIELD로 지정한다. 필드에 직접 접근한다. 필드 접근 권한이 private이어도 접근할 수 있다. @Entity @Access(AccessType.FIELD) public class Member { @Id private String id; } @Id가 필드에 있으므로 @Access(AccessType.FIELD)로 설정한 것과 같다. 따라서 @Access는 생략해도 된다. 프로퍼티 접근 AccessType.PROPERTY로 지정한다. Getter를 사용한다. @Entity @Access(AccessType.PROPERTY) public class ..

JVM/JPA 2023.06.11

@Temporal

java.util.Date, java.util.Calendar 을 매핑할 때 사용한다. 생략하면 자바의 Date와 가장 유사한 timestamp(MySQL) 혹은 datetime(H2, 오라클, PostgreSQL) 로 정의된다. 속성 기능 기본값 value TemporalType.DATE 데이터베이스 date 타입과 매핑 (2013 - 10 11) TemporalType.TIME 데이터베이스 time 타입과 매핑 (11:11:11) TemporalType.TIMESTAMP 데이터베이스 timestamp 타입과 매핑 (2013-10-11 11:11:11) LocalDate, LocalTime, LocalDatetime JPA 2.2 부터 알아서 매핑해준다. 데이터베이스에는 HH:mm:ss 형태로 저장된다.

JVM/JPA 2023.06.11

@Enumerated

자바의 enum 타입을 매핑할 때 사용한다. 속성 기능 기본값 value EnumType.ORDINAL: enum 순서를 데이터 베이스에 저장 EnumType.STRING: enum 이름을 데이터베이스에 저장 EnumType.ORDINAL EnumType.ORDINAL 데이터베이스에 저장되는 데이터 크기가 작다. 이미 저장된 enum의 순서를 변경할 수 없다. EnumType.STRING (권장) 저장된 enum의 순서가 바뀌거나 enum이 추가되어도 안전하다. 데이터베이스에 저장되는 데이터 크기가 ORDINAL에 비해서 크다.

JVM/JPA 2023.06.11

@Column

객체 필드를 테이블 컬럼에 매핑하는데 사용되는 애노테이션이다. @Column을 생략하게 되면 기본값이 적용되는데, 자바 기본 타입일 때는 nullable 이 false가 된다. 속성 기능 기본값 name 필드와 매핑할 테이블의 컬럼이름 필드 이름 insertable 엔티티 저장 시 이 필드도 같이 저장한다. false옵션은 읽기 전용일 때 사용한다. true updatable 엔티티 수정 시 이 필드도 같이 저장한다. false옵션은 읽기 전용일 때 사용한다. true table 하나의 엔티티를 두 개 이상의 테이블에 매핑할 때 사용. 지정한 필드는 다른 테이블에 매핑할 수 있다. 현재 클래스가 매핑된 테이블 nullable null 값의 허용 여부를 설정한다. true unique 한 컬럼에 유니크 제..

JVM/JPA 2023.06.11

JPA 키 생성 전략

직접 할당 전략 기본 키를 직접 할당하려면 @Id만 매핑하면 된다 @Id private Long id; 적용 가능 자바 타입 자바 기본형 자바 래퍼형 String java.util.Date java.sql.Date java.math.BigDecimal java.math.BigInteger IDENTITY 전략 기본 키 생성을 데이터베이스에 위임하는 전략이다. @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; 엔티티를 데이터베이스에 저장한 후에 식별자를 조회해서 엔티티의 식별자를 할당한다. 때문에 이 전략은 persist 메소드 호출 시 즉시 INSERT SQL이 데이터베이스에 전달되어 트랜잭션을 지원하는 쓰기 지연이 동작하지..

JVM/JPA 2023.06.10

@Entity

JPA를 사용해서 테이블과 매핑할 클래스에 필수로 붙여야한다. 주의 사항 기본 생성자는 필수다. final 클래스, enum, interface, inner 클래스에는 사용할 수 없다. 저장할 필드에 final을 사용할 수 없다. 속성 정리 속성 기능 name JPA에서 사용할 엔티티 이름을 지정한다. 생략시 클래스 이름을 사용한다. 다른 패키지에 이름이 같은 엔티티 클래스가 있다면 이름을 지정해서 충돌하지 않도록 해야 한다.

JVM/JPA 2023.06.10