@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 |