"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > 사용자 정의 사용자 유형을 사용하여 PostgreSQL JSON 열을 최대 절전 모드 엔터티에 매핑하는 방법은 무엇입니까?

사용자 정의 사용자 유형을 사용하여 PostgreSQL JSON 열을 최대 절전 모드 엔터티에 매핑하는 방법은 무엇입니까?

2024-11-08에 게시됨
검색:128

How to Map PostgreSQL JSON Columns to Hibernate Entities Using a Custom User Type?

PostgreSQL JSON 열을 Hibernate 엔터티에 매핑

PostgreSQL 데이터베이스로 작업할 때 JSON 형식으로 데이터를 저장하는 열을 접하는 것이 일반적입니다. Hibernate를 사용하여 이러한 열을 Java 엔터티에 효과적으로 매핑하려면 적절한 데이터 유형을 선택하는 것이 중요합니다.

이 맥락에서 당면한 질문은 PostgreSQL JSON 열을 Hibernate 엔터티 필드에 매핑하는 것과 관련됩니다. 일반적인 접근 방식은 제공된 코드 조각에서 볼 수 있듯이 문자열 필드를 사용하는 것입니다.

@Entity
public class MyEntity {

    private String jsonPayload;

    public MyEntity() {
    }
}

그러나 이 접근 방식은 Hibernate가 문자열을 JSON으로 변환하려고 시도하므로 엔터티를 저장할 때 예외가 발생할 수 있습니다.

JSON 열에 대한 올바른 값 유형

PostgreSQL JSON 열을 Hibernate 엔터티 필드에 올바르게 매핑하려면 사용자 정의 사용자 유형 사용을 고려하세요. StringJsonUserType과 같은 userType 구현을 생성하면 문자열 값과 JSON 데이터베이스 유형 간의 매핑을 처리할 수 있습니다.

샘플 구현은 다음과 같습니다.

public class StringJsonUserType implements UserType {
    ...
    @Override
    public int[] sqlTypes() {
        return new int[] { Types.JAVA_OBJECT};
    }

    ...
}

그런 다음 사용자 정의 userType을 사용하여 엔터티 속성에 주석을 달 수 있습니다.

@Type(type = "StringJsonObject")
public String getJsonPayload() {
    return jsonPayload;
}

추가 구성

이 솔루션을 완전히 구현하려면 다음이 필요할 수 있습니다.

  1. JSON 유형을 포함하도록 PostgreSQL 언어를 확장합니다. :
public class JsonPostgreSQLDialect extends PostgreSQL9Dialect {
    ...
    this.registerColumnType(Types.JAVA_OBJECT, "json");
    ...
}
  1. @TypeDefs로 엔터티 클래스에 주석을 답니다:
@TypeDefs({ @TypeDef( name= "StringJsonObject", typeClass = StringJsonUserType.class)})
  1. 고급 사용자 유형 구현에 필요한 라이브러리를 삽입합니다. mapping.

GitHub 참조 프로젝트

추가 탐색을 위해 제공된 GitHub 프로젝트(https://github.com/timfulmer/hibernate-postgres-)를 고려하세요. JSON 유형

최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3