Programming/Spring

[JPA] Underbar 언더바 ( _ )가 포함된 컬럼명을 JPA가 인식 못하는 문제

빠른손 2022. 4. 20. 11:28
728x90

Entity클래스에서 아래와 같이 각 컬럼명에 언더바가 포함되어 있으면 JPA가 인식하지 못하는 문제가 발생합니다.

@Entity
@Getter
@NoArgsConstructor
public class Post {
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Id
    private Integer post_no;

    @Column(nullable = false)
    private String post_title;

    @Column(nullable = false, length = 2000)
    private String post_contents;

    @Column(nullable = false)
    private String nickname;

제 경우엔 Repository에서 오류가 발생했습니다. 아래와 같이 컬럼명대로 Post_no으로 프로그램을 실행시키면

Post_no에서 언더바 전에 있는 Post를 하나의 컬럼으로 인식해서 Post컬럼을 찾을수 없다는 오류가 발생했습니다.

public interface PostRepository extends JpaRepository<Post, Integer> {
    List<Post> findAllByOrderByPost_no();
}

 

따라서 JPA가 컬럼을 인식해줄 수 있도록 컬럼 어노테이션에 한 가지 작업을 해줄 필요가 있습니다. 굳이굳이 DB의 컬럼명까지 바꿀 필요는 없겠죠? 개인 프로젝트라면 크게 상관없을지도 모르지만 현업에서 협업하는 중이라면 더욱이 본래 계획서대로 프로그래밍하는 것이 다같이 행복한 길이니까요.

 

해결방법은 아래와 같습니다.

@NoArgsConstructor
@Getter
@Entity
public class Post {
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Id
    @Column(name = "post_no")
    private Integer postNo;

    @Column(nullable = false, name = "post_title")
    private String postTitle;

    @Column(nullable = false, name = "post_contents", length = 2000)
    private String postContents;

    @Column(nullable = false, name = "nickname")
    private String nickname;

위 코드처럼 각 컬럼의 Column어노테이션에 name = "컬럼명"을 추가해주면 됩니다. 그리고 Repository에서도 아래와 같이 변경해주시면 됩니다. 이렇게 하면 기존의 언더바 컬럼명을 JPA에게 전달하고 사용할 때는 카멜케이스로 변수명을 쓸 수 있게됩니다.

public interface PostRepository extends JpaRepository<Post, Integer> {
    List<Post> findAllByOrderByPostNo();
}

 

그럼 오늘도 좋은 하루 되세요.

 

 

 

*잘못된 정보라고 생각되는 부분이 있으시다면 댓글 부탁 드리겠습니다. :)

 

728x90