1월 16일 JPA 엔티티 매핑
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절로 사용된다.