문제

Java UUID와 함께 PostgreSQL의 기본 UUID 유형을 사용하고 싶습니다. JPA 제공 업체 및 ORM으로 최대 절전 모드를 사용하고 있습니다. 직접 저장하려고하면 Postgres의 바이트로 저장됩니다.

어떻게 할 수 있습니까?

도움이 되었습니까?

해결책

JDBC 드라이버 (현재 8.4DEV-700)의 최신 개발 버전을 사용해 보거나 다음 릴리스 버전을 기다리십시오. (추가로 편집 : 8.4-701이 출시되었습니다)

그만큼 릴리즈 노트 이 변화를 언급하십시오 :

데이터베이스 UUID 유형을 java.util.uuid에 매핑하십시오. 이것은 비교적 새로운 서버 (8.3) 및 JDK (1.5) 버전에만 적용됩니다.

다른 팁

다음은 내 답변이 있습니다 최대 절전 모드에 의해 지원되는 Postgresql UUID? ... 나는이 질문이 오래되었음을 알고 있지만 누군가가 그 문제를 우연히 발견하면 도움이 될 것입니다.

이것은 UUID에 다음 주석을 추가하여 해결할 수 있습니다.

import org.hibernate.annotations.Type;
...
@Type(type="pg-uuid")
private java.util.UUID itemUuid;

최대 절전 모드가 왜 이것을 기본 설정으로 만들지 않는지, 나는 당신에게 말할 수 없었습니다 ...

업데이트: 여전히 사용하는 문제가있는 것 같습니다 createNativeQuery 메소드 uuid 필드가있는 개체를 여는 방법. 다행히도 createQuery 지금까지 방법은 저에게 잘 작동했습니다.

비 JPA 사용에서는 UUID를 PostgreSQL이 수락하는 문자열로 포맷하기 위해 사용자 유형을 만들고 userType 구현의 이름을 열 유형으로 제공합니다.

당신은 다음과 같이 시도 할 수 있습니다.

 @Column(name="foo", columnDefinition="uuid") 

여기서 칼럼 정의는 기본 SQL의 조각입니다

아마도 UUID 유형을 문자열로 자동 변환 할 수있을 것입니다 (UUID.TOSTRING ()는 표준 36 차 표현을 제공해야합니다)? DBS는 일반적으로 문자열과 기본 유형 사이를 안정적으로 변환합니다.

이 시도

@Column(name = "UUID", nullable=false, insertable = false, columnDefinition="uuid DEFAULT uuid_generate_v4()")
private String uuid;
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top