엔티티와 테이블을 정확하게 매핑하는것은 JPA에서 중요한 요소입니다.

따라서 다양한 어노테이션을 알아두어야 합니다.


대표적 어노테이션

  • 객체와 테이블 매핑 :  '@Entity,@Table'
  • 기본키 매핑 : '@Id'
  • 필드와 컬럼 매핑 : '@Column'
  • 연관 관계 매핑 : '@ManyToOne,@JoinColumn'


테이블을 엔티티(객체)로 매핑한 예

테이블의 특성관계형 DB특성


JAVA Class를 통해 관계형 DB가 가진  요소인 엔티티,속성,기본키,연관관계등을

매핑할수가 있습니다. 각 인스턴스 튜플요소의 집합요소는 Repository객체의 검색조건에의해

ListType형태로 사용이 가능합니다.  

Entity를 사용하여 Class객체와 매핑된 테이블 객체는, 어플리케이션 내에서도

User Class(객체)라고 표현하지 않고, User Entity라고 표현합니다. ( DB와 OOP의 일치)

@Entity(name="User")
@Table(name="tbl_user")
@Access(AccessType.PROPERTY)
public class User {     //사용자라는 관계형DB가 표현하는 엔티티를 클래스를 통해 정의합니다.
	@Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "USER_ID")
    private Long id;    // DataType과 이름을 정의하는 속성(필드,멤버)입니다.

	private String name;

	private String email;


	@Column(columnDefinition="char(7)")
	private String	itemtype;
 
	@ManyToOne    //ERD의 연관도 관계를 표현할수 있습니다.
	@JoinColumn(name = "GROUP_ID")
    private GroupInfo groupInfo;


//getter,setter 생략


Entity

속성기능기본값
name

JPA에서 해당 엔티티에 접근할때 사용되는 이름으로

지정이가능합니다.

지정을 하지 않을시 Class 이름 ( ex>User)

을 그대로 사용

  • 어노테이션 생략불가


Table

속성기능기본값
name실제 매핑할 테이블명

엔티티의 이름

(네임룰적용가능)


catalogcatalog기능이 있는 데이터베이스에서 관련기능 매핑
schemaschema기능이 있는 데이터베이스에서 관련기능 매핑
uniqueConstraintsDDL 생성시 유니크 제약조건을 만듬
  • 어노테이션 생략가능

Column

속성기능기본값
name매핑할 필드명 지정이 가능합니다.지정없을시 멤버이름 그대로사용
nullablenull 제약조건 지정가능

true

unique한컬럼에 유니크 제약을 걸때false
columnDefinition

데이터 베이스의 컬럼정보를 지정


length문자 길이 제약조건 String사용가능255
precision,scale아주큰 숫자,정밀도가 높은 소수점을 사용시

precision=19,

scale=2

  • 어노테이션 생략 가능
  • 자바 기본타잎에는 null이 허용되지 않는다. 그래서 이곳에 null이 셋팅되려고하면 예외가 발생한다.
  • 만약, 데이터가(int) 이미 null허용정책이라고 한다면, Interger를 사용해야한다.
  • 해당 컬럼 Json노출(주로 보안용)을 방지하고자 한다면 '@JsonIgnore' 을 필드에 설정가능


특수  어노테이션

이름기능사용예
Transient데이터베이스에 저장/조회에 관여하지 않고 매핑에 제외
@Transient
private Integer temp;
Access

엔티티에 접근하는방식 지정

@Access(AccessType.FIELD)

멤버를 통해서 접근가능


@Access(AccessType.PROPERTY)

프로퍼티(세터,게터)를 통해 접근

Lob데이터 베이스 BLOB, CLOB 타잎과 매핑




  • No labels