정구리의 우주정복
[Spring] JPA Postgresql Enum 사용시 - ERROR: column "recommend_type" is of type recommend_type but expression is of type character varying Hint: You will need to rewrite or cast the expression. 해결하기 본문
JAVA/PROJECT
[Spring] JPA Postgresql Enum 사용시 - ERROR: column "recommend_type" is of type recommend_type but expression is of type character varying Hint: You will need to rewrite or cast the expression. 해결하기
Jungry_ 2024. 6. 5. 00:09반응형
사용 환경 :
Java 21
Postgresql 16
문제 상황
Postgresql 에 recommend_type 이라는 이름의 Enum 을 만들었음. 하지만 jpa 에서 recommend_type 을 enum 값이 아닌 character 로 인식하면서 발생하는 문제
문제 코드
엔티티
Recommend.java
@Entity
@Table(name = "recommend")
@Getter
public class Recommend {
@Id
@Column(name = "id")
@GeneratedValue(strategy = GenerationType.UUID)
private String id;
@Column(name = "user_id")
private String userId;
@Column(name = "password")
private String password;
@Enumerated(EnumType.STRING)
@Column(name = "recommend_type")
private RecommendType recommendType;
@Column(name = "title")
private String title;
@Column(name = "contents")
private String contents;
@Column(name = "image")
private String image;
@Column(name = "created_date")
private LocalDateTime createdDate;
@Column(name = "modified_date")
private LocalDateTime modifiedDate;
이하생략
DTO
public class AddRecommendRequest {
private String userId;
private String password;
private RecommendType recommendType;
private String title;
private String contents;
private String image;
이하생략
Enum 정의
public enum RecommendType {
RESTAURANT,
PLACE,
CLOTH,
MUSIC,
YOUTUBE,
MOVIE_DRAMA,
ODDS,
ELECTRONICS,
BOOK
}
RecommendService.java
/**
* 신규 게시글 (Recommend) 추가
* @param token 로그인 정보 token 값 (유저정보)
* @param request 추가하고자 하는 정보
* @return 신규 추가된 값
*/
public RecommendResponse addRecommend(String token, AddRecommendRequest request) {
// token parsing
TokenUtils tokenUtils = new TokenUtils();
KeycloakToken keycloakToken = tokenUtils.tokenParser(token);
Recommend recommend = Recommend.builder()
.userId(keycloakToken.userId())
.password(request.getPassword())
.recommendType(request.getRecommendType())
.title(request.getTitle())
.contents(request.getContents())
.image(request.getImage())
.build();
Recommend result = recommendRepository.save(recommend);
return RecommendMapper.toDto(result);
}
엔티티에 Enumerate 를 추가해 enum 임을 명시했지만 해당 오류가 계속해서 발생했다
문제 해결
Entity 에 columnDefinition , @JdbcTypeCode 를 추가함으로 해결
@Enumerated(EnumType.STRING)
@Column(name = "recommend_type", columnDefinition = "recommend_type")
@JdbcTypeCode(SqlTypes.NAMED_ENUM)
private RecommendType recommendType;
@JdbcTypeCode(SqlTypes.NAMED_ENUM)
Java 에 enum 을 사용해도 JPA 는 enum 임을 알수 없기 때문에 명시를 해주니 해결이 되었다
왜 나에게 이런일이
반응형
'JAVA > PROJECT' 카테고리의 다른 글
[Git Action] Git Action CI/CD 구축하기 (0) | 2024.10.01 |
---|---|
[Keycloak] java 로 keycloak 에서 user 목록 가져오기 (0) | 2024.09.24 |
[Spring] Entity에서 Enum 사용하는 법 (org.postgresql.util.PSQLException: Bad value for type byte : 해결) (2) | 2024.05.30 |
[Spring] @Builder 파헤치기 (2) | 2024.05.29 |
[Git/Spring] git ignore 추가하기 (1) | 2024.05.28 |
Comments