프로젝트 설정
- 엔티티 어노테이션
1-1. @Entity(name = “테이블명“)
@Entity(name = "AUTH_GROUP_DANGI")
public class AuthGroupDangi { ... }
----------------------------------------------------
@Entity
@Table(name = "AUTH_GROUP_DANGI") 으로 하지 않는다!!
이 부분은 Repository에서 @Query 어노테이션 사용하여 JPQL 작성할때 연관된 것으로,
둘 중 어느 것으로 해도 상관은 없으나 프로젝트에 통일성을 주기 위해 @Entity(name = “테이블명“) 으로
1-2. 엔티티 상단에 @Setter 는 되도록 작성하지 않는다.
데이터 수정이 필요할 경우 엔티티 내에 커스텀 메소드를 추가하여 값을 변경해준다.
public void updateEntity( Long id, String value, Object obj, ... ) {
this.id = id;
this.value = value;
this.custom = obj.get('custom');
....
}
2. PK 컬럼 어노테이션과 데이터타입
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "auth_group_dangi_id")
private Long authGroupDangiId;
2-1. @GeneratedValue 어노테이션에 (strategy = GenerationType.IDENTITY) 를 꼭 붙여준다.
기본값은 AUTO 이다. 이 값은 DB 종류에 따라 시퀀스를 생성하게 될 수도 있다.
그러므로 PK 가 auto_increment 이면 IDENTITY를 붙여줘야 한다.
2-2. PK의 데이터 타입은 Long 으로 한다.
auto_increment 계속해서 증가하는 값이다.
데이터가 많아지면 Integer 데이터 형보다 길이가 길어질 수 있으므로 미리 Long으로 하자. (JPA 관례적으로 PK에 Long을 많이 쓴다)
3. 컬럼 명
@Column(name = "user_id")
private String userId;
자바의 변수명은 카멜케이스 표기법을 사용하고, 컬럼맵핑은 @Column 어노테이션의 name으로 지정해준다.
repository에서 findByUserIdAnd~~~() 를 자유롭게 쓰기 위함이다.
4. enum 지정
package kr.co.dangi.mango.commons.enums;
public enum UseYn {
Y, N
}
@Column(name = "use_yn")
@Enumerated(EnumType.STRING)
private UseYn useYn;
enum 을 만들고, 엔티티 데이터 타입에 지정해준다.
그리고 @Enumerated(EnumType.STRING) 를 꼭 붙여준다.
@Enumerated 의 기본값이 EnumType.ORDINAL 인데, 이것은 Enum의 순번이 데이터로 저장된다. (예 : Y는 1로 N은 2로 저장)
나중에 enum 이 추가될때 순번이 바뀔 수 있고 망고에서는 기본적으로 enum을 스트링으로 저장하고 있으므로 STRING으로 지정한다.