본문 바로가기
Spring Framework/스프링

[오류해결] Spring Boot: org.hibernate.mapping.BasicValue cannot be cast to

by 스코리아 2023. 11. 4.

안녕하세요, 스코리아입니다.

 

도메인 Entitiy를 수정한 직후, 스프링 부트에서 발생한 오류와 해결 방법에 대해서 소개해보겠습니다.

오류에 관해서 구글에 검색해도 많은 내용이 없어서 제가 해결한 방법을 공유드리고자 합니다.

 

문제상황

저는 Entitiy 도메인 객체를 일부 수정한 뒤,

스프링 부트 3.1.0에서 스프링 부트를 실행시킬 때 아래와 같은 에러가 표시되었습니다.

스프링부트 오류 메시지

 

Error creating bean with name 'entityManagerFactory' defined in class path resource
[org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]:
class org.hibernate.mapping.BasicValue cannot be cast to
class org.hibernate.mapping.ToOne (org.hibernate.mapping.BasicValue and
org.hibernate.mapping.ToOne are in unnamed module of loader 'app')

 

에러의 내용을 보아하니, ToOne (@ManyToOne) 연관관계 매핑에 있어서 오류가 발생하였습니다.

 

제가 엔티티를 업데이트한 내용은 아래와 같습니다.

대댓글 기능을 만들기 위해서, parentCommentId (부모 댓글 ID)와 childComments를 새로 추가해 주었습니다. parentCommentId에는 매핑을 하지 않고 childComments에만 mappedBy와 함께 @OneToMany 매핑을 하여, 단방향 연관관계로 만들었습니다.

@Setter
@Column(updatable = false)
private Long parentCommentId; // 부모 댓글 ID

@ToString.Exclude
@OrderBy("createdAt ASC")
@OneToMany(mappedBy = "parentCommentId", cascade = CascadeType.ALL)
private Set<ArticleComment> childComments = new LinkedHashSet<>();

 

이 오류는 스프링 부트의 hibernate-core 6.2.0 ~ 6.3.0 Final 버전 사이에서 발생하며 Entity 연관관계를 양방향으로 관계 설정을 하지 않고 단방향으로 mappedBy로 지정을 했을 때 발생하고 있습니다.

 

 

해결 방안

plugins {
    id 'java'
    id 'org.springframework.boot' version '3.1.4'
    id 'io.spring.dependency-management' version '1.1.3'
    id 'org.hibernate.orm' version '6.3.1.Final' //추가
}

 

build.grade의 plugins에 hibernate orm 버전을 6.3.1 Final로 명시해 주기 위해 위의 코드처럼 한 줄을 추가합니다.

처음에 6.3.0 Final을 써봤는데, 일부 오류가 발생하여 오류가 해결된 6.3.1 Final을 사용하는 것이 좋겠습니다.

 

스프링부트 오류 해결 완료

 

이제 정상적으로 스프링 부트가 켜지는 모습입니다.

정상적으로 오류가 해결되었습니다.

 


 

이 오류는 단방향 연관관계 매핑 과정에서 발생한 오류였으며, hibernate 버전을 변경함에 따라 해결되었습니다.

읽어주셔서, 감사합니다.