Hibernate error, org.hibernate.query.SemanticException: The assignment expression type

Hibernate
김주혁's avatar
Jul 24, 2024
Hibernate error, org.hibernate.query.SemanticException: The assignment expression type
 
발생한 풀 에러는
 
org.hibernate.query.SemanticException: The assignment expression type [java.sql.Timestamp] did not match the assignment path type [java.lang.String] for the path
 
쿼리에 전달된 인자의 타입이 Timestamp인데 원 JPA Entity의 타입인 String과 일치하지 않아서 발생했다는 내용이다.
 
실제 동작한 쿼리는
@Modifying @Query("UPDATE Inspection i SET i.deletedDt = :createdDt WHERE i.id = :id") void deleteById(@Param("createdDt") String createdDt, @Param("id") Long id);
이었는데, 나는 자동 생성 값을 사용하는 것을 좋아하지 않아 직접생성해서 넣어주다 에러가 발생핬다.
 
Stackoverflow를보면,
 
즉각적인 매핑 변경
Instant는 기본적으로 SqlType.TIMESTAMP_UTC 유형 코드에 매핑되고, 가능한 경우 SQL 유형 timestamp with time zone에 매핑되고 timestamp로 폴백합니다. 이 변경으로 인해 일부 데이터베이스에서 스키마 검증 오류가 발생할 수 있습니다.
timestamp with time zone으로 마이그레이션하려면 cast(old as timestamp with time zone)와 같은 마이그레이션 표현식이 필요할 수 있습니다.
이전 버전과의 호환성을 유지하려면 hibernate.type.preferred_instant_jdbc_type 설정을 TIMESTAMP로 구성하세요. 속성을 설정해보세요hibernate.type.preferred_instant_jdbc_type=TIMESTAMP
라는 내용의 Spring boot 3, Hibernate 6 마이그레이션 가이드와 관련된 내용을 안내하지만
 
대부분의 사람들이 겪는 문제는 위에서 언급한 것 처럼 쿼리에 전달된 인자의 타입과 엔티티 타입이 일치하지 않아서일 것으로 추정된다.
 
인자의 타입을 String으로 수정 후 다시 정상적으로 동작했다.
 
 
Share article

vlogue