오늘은 Part2. 게시판 서비스 강의의 `데이터베이스 접근 로직 테스트 정의2` 부분을 학습하였다.
오늘에서야 드디어 엔티티를 만드는 과정을 시작했다.
엔티티에 @Setter 사용 금지
엔티티를 작성할 떄 @Setter를 붙이지 않는다. 무분별하게 @Setter를 사용하면 여기저기서 엔티티의 값을 변경할 수 있다. 따라서 데이터를 변경해야하면 @Setter를 사용하지 말고, 따로 메소드를 작성하는 것이 객체의 일관성을 보장할 수 있는 안전한 방법이다.
엔티티 기본 생성 접근자를 protected로
기본 생성자 접근자를 protected로 변경하면 new Entity() 사용을 막을 수 있어서 객체의 일관성을 더 유지할 수 있다.
롬복을 사용한다면 엔티티에
@NoArgsConstructor(access = AccessLevel.PROTECTED)
다음과 같은 애노테이션 설정을 통해 설정할 수 있다.
스프링부트 JPA 매핑 어노테이션
@Entity
클래스에 선언하면 그 클래스는 JPA가 관리한다. DB 테이블과 클래스를 매핑한다면 반드시 이 어노테이션을 붙여주어야 한다.
@Table
매핑할 테이블을 지정한다.
JPA 인덱스 사용하기
@Index 어노테이션을 사용해서 인덱스를 지정할 수 있다.
@Table(indexes = {
@Index(columnList = "title"),
@Index(columnList = "hashtag"),
@Index(columnList = "createdAt"),
@Index(columnList = "createdBy")
})
PK 설정하기
PK를 나타내기 위해 @Id 어노테이션을 사용하고, 생성 전략을 정의하기 위해 @GeneratedValue를 사용한다. @GeneratedValue의
strategy 속성의 default 값은 GenerationType.AUTO인데 IDENTITY로 바꿔주어야한다. MySQL의 auto increment 생성방식이 IDENTITY 방식이기 때문이다.
@GeneratedValue(strategy = GenerationType.IDENTITY)