@Query 카멜 케이스(CamelCase) 필드명과 언더스코어(underscore)

Yeeun·2025년 4월 24일
0

SpringBoot

목록 보기
17/46

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 쿼리에서 사용됩니다.

언더스코어 변환 방식:

  • 카멜 케이스: someFieldName
  • 언더스코어 방식: some_field_name

JPA가 자동으로 처리하는 변환 규칙

  • 카멜 케이스 -> 언더스코어: someFieldNamesome_field_name
  • 언더스코어 -> 카멜 케이스: some_field_namesomeFieldName

이 방식은 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")을 사용하여 필드와 컬럼명을 명시적으로 매핑할 수 있습니다.


정리

  • 자동 변환: JPA는 카멜 케이스 필드명을 자동으로 언더스코어 방식으로 변환하여 SQL 쿼리에서 사용합니다.
  • 수동 변환: @Column(name = "column_name")을 사용하여 특정 컬럼명을 수동으로 매핑할 수 있습니다.
  • 기본 동작: 별도로 설정하지 않으면 JPA는 자동으로 카멜 케이스를 언더스코어로 변환합니다.

이 방식은 Spring Data JPA의 기본 동작이므로 별도로 설정할 필요 없이 카멜 케이스 필드명이 자동으로 언더스코어 방식으로 매핑됩니다.

0개의 댓글