JPA

1월 16일 JPA 엔티티 매핑

Chaerin Yoo 2023. 1. 16. 11:31

JPA에서 중요한것

1.영속성 컨텍스트 동작방식

2.실제 설계(객체와 DB를 매핑)

 

엔티티 매핑관련 어노테이션

-객체와 테이블 매핑 

@entity  : 해당 객체가 entity로 관리될것을 의미합니다.

@table :  기본적으로 객체의 class명으로 테이블이 생성되지만 별도의 이름의 테이블로 생성하고자 할경우 붙여 줍니다.

-필드와 컬럼 매핑

@column : default로 필드명과 같은 컬럼에 데이터가 매핑되만 필드명과 다른 컬럼과 연결하고 싶을경우 추가적으로 붙여줍니다.

-기본키 맵핑 

@Id : 테이블에서 PK로 사용될 필드에 붙여줍니다 .

-연관관계 매핑

@ManyToOne : 다대일 관계를 표현할때 (다)에 해당하는 쪽에 붙여줍니다,

@JoinColumn(name = "컬럼명")  : 연관관계의 주인쪽(FK를 실질적으로 관리하는 쪽)에 명시하며 해당 FK컬럼과 연결을 합니다.

@OneToMany(mappedBy = "주인필드명") : 다디일 관계를 표현할때 (일)에 해당하는 쪽에 붙여줍니다. 

                                                               mappedBy는 연관관계에서 FK를 관리하지 않는쪽에 붙여줍니다. 그래서                                                                               mappedBy의 경우 지정해주는 joinColumn이 붙은 주인쪽의 컬럼을 지정해 줍니다.

1.객체와 테이블 매핑

VO에 @Entity가 붙은 클래스는 JPA가 관리합니다. 이런 클래스를 엔티티 라 합니다.

JPA를 사용해서 테이블과 매핑할 클래스는 @entity를 필수적으로 붙여줍니다.

주의사항

1.VO의 기본 생성자가 꼭 필요합니다.(파라미터가 없는 public 또는 protected생성자)

2.final클래스, enum , interface , inner 클래스엔 사용할수 없습니다. 

3.저장할 필드에는 final을 사용하면 안된다.

 

@entity

public class Member {} 

//JPA가 관리시작

 

@entity(name="")

JPA에서 사용할 엔티티 이름을 지정합니다

기본값 : 클래스 이름을 그대로 사용, 같은 클래스이름이 없으면 가급적 기본값을 사용한다,

 

@table

@entity는 JPA가 관리할 (객체)로 만드는 것이고

@table는 @entity의 vo와 매칭할 DB테이블을 지정합니다

속성

name = 매핑할 테이블 이름 , 기본적으론 엔티티 이름을 사용

catalog = 데이터베이스 catalog와 매핑

schema = 데이터베이스 schema와 매핑

uniqueConstraints(DDL) = DDL생성시에 유니크 제약조건을 생성

 

*table를 명시하지 않으면 기본값으로 class명으로 적용되어 DB에 select시에 JPA가 생성하는 SQL에 from절로 사용된다.