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
'Programming > Spring' 카테고리의 다른 글
| [Spring] Web server failed to start. Port 8080 was already in use 에러 (0) | 2022.04.08 |
|---|