JPA

JPA @Entity @Table @Column

jojelly 2022. 3. 12. 16:43
반응형

@Entity

• @Entity가 붙은 클래스는 JPA가 관리, 엔티티라 한다.

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

• 주의

• 기본 생성자 필수(파라미터가 없는 public 또는 protected 생성자)

• final 클래스, enum, interface, inner 클래스 사용X

• 저장할 필드에 final 사용 X

속성: name 
• JPA에서 사용할 엔티티 이름을 지정한다. 
• 기본값: 클래스 이름을 그대로 사용(예: Member) 
• 같은 클래스 이름이 없으면 가급적 기본값을 사용한다

 


@Table

@Table은 엔티티와 매핑할 테이블 지정

name  -  매핑할 테이블 이름 (엔티티 이름을 사용)

catalog-  데이터베이스 catalog 매핑

schema-  데이터베이스 schema 매핑

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

 

예시.)



hibernate.hbm2ddl.auto

JPA는데이터베이스 스키마를 자동생성해준다.  

//DDL을 어플리케이션 실행 시점에 자동 생성해준다.
//방언에 따라 알맞게 DDL생성
//이 DDL은 운영서버에서는 사용하지 않는다.
  • create  기존테이블 삭제 후 다시 생성 (DROP + CREATE) 
  • create-drop  create와 같으나 종료시점에 테이블 DROP
  • update  변경분만 반영(운영DB에는 사용하면 안됨)
  • validate  엔티티와 테이블이 정상 매핑되었는지만 확인
  • none  사용하지 않음

 

데이터베이스 스키마를 자동생성해주는 속성으로 persistence.xml에 추가해준다. 

hibernate.hbm2ddl.auto

 

create로 설정할경우 설면처럼 기존테이블 삭제 후 다시 생성 (DROP + CREATE)  해준다. 

 

정리

create는 컬럼 추가시 db를 수정할 필요없이 테이블을 전체 삭제했다 다시 만들 수 있다. 

create-drop의 경우는 테이블을 만들었다 다시 끝날때 드롭시키기 때문에 테스트할때 보통 사용할 수 있다. 

update는 컬럼이 추가되는 것만 업데이트하고 컬럼을 없애는 건 반영해주지 않는다

validate는 테이블이 db와 정상적으로 매핑(딱 맞게 되어있는지)를 확인해준다. 

 

 

 

[주의사항]

• 운영 장비에는 절대 create, create-drop, update 사용하면 안된다. 
• 개발 초기 단계는 create 또는 update 
• 테스트 서버는 update 또는 validate 
• 스테이징과 운영 서버는 validate 또는 none


 

DDL 생성 기능

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

 

제약조건 추가

예시1.) 회원 이름은 필수(즉 null값은 안된다), 10자 초과X 

@Column(nullable = false, length = 10)

예시2.)유니크 제약조건 추가 

@Table(uniqueConstraints = {@UniqueConstraint( name = "NAME_AGE_UNIQUE", columnNames = {"NAME", "AGE"} )})

 

 

 

제약조건중 nullable = false 가 있다. null값을 받지 못하도록 하는건데 @NotNull과의 차이는 

nullable = false 는 데이터베이스에 명시적으로 not null 제약 조건을 걸어준다. 하지만 유효성 검사는 해주지 않는다!

@NotNull을 이용하는 것이 제약조건 설정과 유효성 검사를 같이 해주기때문에 조금 더 안전하게 사용할 수 있을것 같다

 

참고: [JPA] nullable = false와 @NotNull의 차이점 (tistory.com)

 

[JPA] nullable = false와 @NotNull의 차이점

지금 보시는 이글은 정확하지 않습니다. 곧 수정예정입니다. nullable = false vs. @NotNull 친구들과 스프링 부트를 공부하던 도중 한 친구가 내 코드를 보고 저번에는 @NotNull을 쓰던데 이번에는 nullable

bottom-to-top.tistory.com

 

어노테이션 		설명
@Column 		컬럼 매핑
@Temporal 		날짜 타입 매핑
@Enumerated		enum 타입 매핑
@Lob 			BLOB, CLOB 매핑
@Transient 		특정 필드를 컬럼에 매핑하지 않음(매핑 무시)

 

 

 

 

 

 

 

 

 

 

 

 

반응형

'JPA' 카테고리의 다른 글

@MappedSuperclass  (0) 2022.04.08
1:1매핑  (0) 2022.03.17
양방향 매핑  (0) 2022.03.16
[JPA] 매핑 어노테이션 정리 [column,Temporal, Enumerated, Lob, Transient]  (0) 2022.03.13
JPA Query update오류 해결  (0) 2021.06.22