엔티티 매핑

Ahri·2022년 5월 25일
0

HelloJPA

목록 보기
3/4

인프런 (자바 ORM 표준 JPA 프로그래밍 - 기본편, 김영한) 강의를 듣고 정리한 내용입니다

객체와 테이블 매핑 : @Entity

  • JPA 를 사용해 테이블과 매핑할 클래스에 사용
  • @NoArgsConstructor 등 기본 생성자를 필수로 만들어야 함
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@Entity(name = "user")
public class Member {
}
// user 테이블과 Member 클래스 매핑

필드와 컬럼 매핑 : @Column, @Enumerated, @Lob, @Transient 등

@Entity(name = "user")
public class Member {
 @Id
 private Long id;
 
 @Column(name = "name")  //컬럼 매핑 name(DB 칼럼이름), insertable/updateable (등록, 변경 가능여부)
 private String username;
 
 @Enumerated(EnumType.STRING) // enum 타입 매핑. EnumType.STRING 으로 사용
 private Type userType;
 
 @Lob	//BLOB(byte[], java.sql. BLOB), CLOB(String, char[], java.sql.CLOB) 매핑. 속성 없음
 private String description;
 
 @Transient  //매핑 무시. DB와 관련 없음. 메모리상에서만 값을 갖고 싶을떄 사용함
 private String tempName;
 
}

기본키 매핑 : @Id, @GeneratedValue

@Id : 직접 할당시 사용

 @Id
 private Long id;
member.setId(4L);

@GeneratedValue : 자동생성

  • 1) IDENTITY
    PK생성 데이터베이스에 위임
    MySQL, PostgreSQL, SQL Server, DB2 등에서 사용
    em.persist() 시점에 즉시 insert 쿼리 실행(보통 jpa는 커밋 시점에 insert 쿼리 실행하지만 이 경우는 예외)
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
  • 2) SEQUENCE
    데이터베이스 시퀀스 오브젝트 사용
    오라클, PostgreSQL, DB2, H2 데이터베이스 등에서 사용
    @SequenceGenerator 필요
@Entity
@SequenceGenerator(
	name = "MEMBER_SEQ_GENERATOR",
	sequenceName = "MEMBER_SEQ", //매핑할 데이터베이스 시퀀스 이름
	initialValue = 1, allocationSize = 1)
public class Member {
	@Id
  	@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "MEMBER_SEQ_GENERATOR")
	private Long id;
 }
 
 //위와 동일
@Entity
public class Member {
	@Id
    @SequenceGenerator(name = "SEQ", sequenceName = "MEMBER_SEQ", initialValue = 1, allocationSize = 1)
  	@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "SEQ")
	private Long id;
 }

//allocationSize 시퀀스 한 번 호출에 증가하는 수
  • 3) TABLE: 키 생성용 테이블을 따로 만들어 관리
    모든 DB에서 사용 가능하나 성능 이슈 있음. 잘 사용 안하므로 패스
    @TableGenerator 필요

  • 4) AUTO: DB에 따라 1) 2) 3) 의 전략 자동 지정

0개의 댓글