JPA

[JPA] @Entity / @Table 매핑 어노테이션 정리

솔솔 2021. 7. 1. 09:43
반응형

@Entity

- @Entity가 붙은 클래스는 JPA가 관리한다.

- JPA를 사용해서 테이블과 매핑할 클래스는 @Entity가 필수

- 기본 생성자 필수!! JPA 스펙상 규정이 되어있다고 해요 :)

- final 클래스, enum, interface, inner 클래스는 @Entity 를 이용해서 사용할 수 없음

- 저장할 필드에 final 사용할 수 없음

 

@Entity 속성

1. @Entity(name="Member")

  - JPA가 내부적으로 구분하는 이름

  - 설정을 따로 안하면 기본값으로 클래스 이름을 그대로 사용한다.

  - 같은 클래스 이름이 없으면 가급적으로 기본값을 사용한다.

 

@Table

- 엔티티와 매핑할 테이블 지정

1. @Table(name="MBR")

  - MBR 테이블로 처리된다.

  - 클래스 이름과 테이블 이름이 다를 경우 JPA에게 테이블 이름을 알려주는 것

 

* 데이터베이스 스키마 자동 생성

 - DDL을 애플리케이션 로딩 시점에 자동으로 생성해줌

 - 데이터베이스 방언(oracle, mysql..)을 활용해서 데이터베이스에 맞는 적절한 DDL 생성

 - 생성된 DDL은 개발 장비에서만 사용

persistence.xml

<property name="hibernate.hbm2ddl.auto" value="create" />

옵션 종류

  • create : 기존테이블 삭제 후 다시 생성 (DROP + CREATE)
  • create-drop : create와 같으나 종료시점에 테이블 DROP
  • update : 변경분만 반영 (운영 DB에는 사용하면 안됨)
  • validate : 엔티티와 테이블이 정상 매핑되었는지만 확인
  • none : 기능 자체를 사용하지 않겠다고 표시
  • delete -> 지우는 것은 지원하지 않음

주의 !!

 - 운영 장비에는 절대 create, create-drop, update 사용하면 안된다.

 - 개발 초기 단계 : create or update

 - 테스트 서버 : update or validate 권장 / create할 경우 테스트 데이터 다 날라감

 - 스테이징과 운영 서버 : validate or none 권장이지만 가급적 사용 x

 

DDL 생성 기능은 DDL을 자동 생성할 때만 사용되고, JPA의 실행 로직에는 영향을 주지 않는다.

@Column(unique=true, length=10, nullable=false)
// 유니크한지 / 길이는 10까지 / 필수

@Column : 컬럼 매핑

@Temporal : 날짜 타입 매핑

@Enumerated : enum 타입 매핑

@Lob : BLOB, CLOB 매핑

@Transient : 특정 필드를 컬럼에 매핑하지 않음(매핑 무시)

@Entity	//JPA가 처음 로딩될 때 사용되는 애구나 인식하기 때문에 필수로 작성
public class Member { 
	
	@Id	//pk가 무엇인지 알려줌
	private Long id;
	
	@Column(name = "name") //객체명은 username으로 사용하고 db 컬럼은 name으로 사용
	private String username; 
	
	private Integer age; 
	
	@Enumerated(EnumType.STRING) //객체에서 enum Type을 사용하고싶을때
	private RoleType roleType; 
	
	@Temporal(TemporalType.TIMESTAMP) //날짜 Type -> DATE날짜/TIME시간/TIMESTAMP날짜시간
	private Date createdDate; 
	
	@Temporal(TemporalType.TIMESTAMP) 
	private Date lastModifiedDate; 
	
	@Lob //db에 varchar2를 넘어서서 큰 값을 넣기 위한 작업
	private String description;
	
	@Transient // DB에는 안쓰고 메모리에서만 사용할때
	private int tmp;
	
	public Member() {}
}

 

 

인강으로 공부하면서 작성하는 글로 잘못된 정보가 있을 수도 있습니다! 잘못된 정보가 있을 시 댓글달아주세요 : 0

반응형

'JPA' 카테고리의 다른 글

[JPA] @Temporal / @Lob / @Transient 속성  (0) 2021.07.05
[JPA] @Column / @Enumerated 속성  (0) 2021.07.02
[JPA] 플러시 flush란?  (0) 2021.06.30
[JPA] 영속성 컨텍스트 PersistenceContext  (4) 2021.06.29
[JPA] JPQL / 페이징 처리  (0) 2021.06.28