February 24, 2022
@Entity
어노테이션이 붙으면 JPA가 관리하고, 이를 엔티티라고 부른다.@Entity
어노테이션이 붙어야한다.주의할 점
name
@Table
은 엔티티와 매핑할 테이블을 직접 지정하는 것을 말한다. 즉 DB에 있는 테이블을 따로 지정해주어야 할 때 사용한다.
데이터베이스 테이블의 컬럼과 객체의 필드를 직접 매칭해준다.
name
insertable, updatable
nullable
length
precision, scale
자바의 enum 타입을 매핑할 때 사용한다.
EnumType.ORDINAL을 사용하면 enum순서를 데이터베이스에 저장하므로, 새로운 값이 바뀔 때 순서가 바뀐다면 데이터베이스에는 순서가 저장되어있는데 객체의 값이 변함에 따라 객체의 내용과 DB의 내용이 의도했던 바와 다르게 꼬일 수 있기 떄문에 반드시 EnumType.STRING
을 사용해야한다.
@Temporal
날짜 타입(java.util.Date, java.util.Calendar)을 매핑할 때 사용한다. 하지만 최근에 사용하는 LocalDate, LocalDateTime을 사용할 때는 생략 가능하다.
@Id
PK로 만들어준다.
@GeneratedValue
PK를 자동으로 생성해준다.
연관관계 매핑이란 DB테이블의 관계를 매핑하는 것을 의미한다.
JPA는 전에 말했듯이 자바에서 객체를 다루는 것처럼 DB의 테이블을 다루는 것이 모토였다. 하지만 객체와 테이블은 관계를 맺는 것에서 다음과 같은 차이를 가진다.
테이블의 연관 관계 : 테이블의 연관관계는 한쪽만 연결되면 결국 양방향이 된다.
외래 키
하나로 두 테이블의 연관관계를 관리할 수 있기 때문에따라서 객체에서 양방향 매핑을 하면, 참조가 2군데 존재하기 때문에 두 객체의 중 하나를 연관관계의 주인
으로 삼아야 한다.
외래키가 있는 곳을 연관관계의 주인
으로 해야만 한다.@JoinColumn
어노테이션을 사용하여 외래키를 설정한다.