Spring Data JPA에서는 카멜 케이스(CamelCase) 필드명과 언더스코어(underscore) 방식으로 작성된 데이터베이스 컬럼명 간의 매핑을 자동으로 처리할 수 있습니다. JPA에서는 기본적으로 필드명과 컬럼명 간의 변환을 자동으로 해주는데, 카멜 케이스 필드명을 사용하면 이를 자동으로 언더스코어 방식으로 변환하여 SQL 쿼리에서 사용합니다.
이를 가능하게 하려면 @Column 어노테이션을 사용하지 않고, JPA가 자동으로 변환하도록 할 수 있습니다.
@Entity
public class Board {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long seq;
private String title;
private String writer;
private String content;
@Column(name = "create_date") // 수동으로 언더스코어 사용한 예시
private Date createDate;
private Long cnt;
// getters and setters
}
위 코드에서 createDate는 카멜 케이스로 정의되어 있지만, @Column(name = "create_date")를 통해 수동으로 언더스코어 형식으로 매핑하고 있습니다.
카멜 케이스 방식으로 필드를 정의하고 @Column 어노테이션 없이 사용하면, Spring JPA가 자동으로 카멜 케이스 필드명을 언더스코어 방식으로 변환하여 데이터베이스에서 사용합니다. 예를 들어, createDate 필드는 JPA가 이를 자동으로 create_date로 변환합니다.
@Entity
public class Board {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long seq;
private String title;
private String writer;
private String content;
private Date createDate; // JPA가 자동으로 "create_date"로 변환
private Long cnt;
// getters and setters
}
위 코드에서 createDate 필드는 언더스코어로 변환되어 create_date로 SQL 쿼리에서 사용됩니다.
someFieldNamesome_field_namesomeFieldName → some_field_namesome_field_name → someFieldName이 방식은 JPA의 기본 동작이므로 별도로 설정할 필요 없이 자동으로 적용됩니다. 단, @Column 어노테이션을 사용하여 데이터베이스 컬럼명과 직접 매핑하는 경우에는 해당 컬럼명을 수동으로 지정할 수 있습니다.
@Column을 사용할 경우만약 카멜 케이스로 작성된 필드명과 다른 데이터베이스 컬럼명이 필요한 경우, @Column 어노테이션을 사용하여 수동으로 매핑할 수 있습니다.
@Entity
public class Board {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long seq;
@Column(name = "board_title") // 'title' -> 'board_title'로 명시적 매핑
private String title;
private String writer;
@Column(name = "content") // 'content' -> 'content'로 매핑, 자동 매핑과 동일
private String content;
private Date createDate;
@Column(name = "cnt") // 'cnt' -> 'cnt'로 매핑
private Long cnt;
// getters and setters
}
위와 같이 @Column(name = "board_title")을 사용하여 필드와 컬럼명을 명시적으로 매핑할 수 있습니다.
@Column(name = "column_name")을 사용하여 특정 컬럼명을 수동으로 매핑할 수 있습니다.이 방식은 Spring Data JPA의 기본 동작이므로 별도로 설정할 필요 없이 카멜 케이스 필드명이 자동으로 언더스코어 방식으로 매핑됩니다.