JPA - DB 컬럼과 엔티티 멤버 변수 Mapping
JPA를 사용할 때, Entity의 멤버 변수와 DB의 컬럼은 무조건 스네이크 케이스 표기법으로 자동 매핑된다.
하지만, Java의 변수명은 카멜 케이스가 대표적인 코드 스타일이기 때문에, 카멜 케이스를 지키며 @Column 어노테이션을 사용해서 DB의 컬럼명과 매핑해주는 것이 좋다.
@Entity
@Getter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@Table(name = "cards")
public class Card {
@Id @GeneratedValue
@Column(name = "card_id")
private Long id;
private String name;
private String image;
@Column(name = "annual_fee")
private String annualFee;
@Column(name = "pre_month_performance")
private String preMonthPerformance;
private String benefits;
}
정적 팩토리 메서드
정적 팩토리 메서드는 stating 메서드로 객체 생성을 캡슐화할 수 있다.
- 장점
- 이름이 있으므로 생성자에 비해 가독성이 좋다
- 호출할 때마다 새로운 객체를 생성할 필요가 없다
- 하위 자료형 객체를 반환할 수 있다
- 형인자 자료형 객체를 만들 때 편하다
- 단점
- 정적 팩토리 메서드만 있는 클래스라면, 생성자가 없으므로 하위 클래스를 못 만든다
- 정적 팩토리 메서드는 다른 정적 메서드와 잘 구분되지 않는다 (문서만으로 확인하기 어려울 수 있음
// 정적 팩토리 메서드
public static MemberCard createMemberCard(Member member, Card card) {
MemberCard memberCard = new MemberCard();
memberCard.member = member;
memberCard.card = card;
return memberCard;
}
JPA 사용 시 PK 생성 전략을 DB에 맡길 경우
MySql에서 PK를 AutoIncrement로 설정한 뒤, 이 전략을 JPA Entity에서도 따를 경우, 꼭 @GeneratedValue 어노테이션에 strategy = GenerationType.IDENTITY를 설정해주어야 한다.
댓글