2009-04-17 34 views
9

Tôi muốn sử dụng kiểu UUID gốc của PostgreSQL với một UUID Java. Tôi đang sử dụng Hibernate như nhà cung cấp JPA của tôi và ORM. Nếu tôi cố gắng để lưu nó trực tiếp, nó chỉ được lưu như là một bytea trong Postgres.Postgres + Hibernate + Java UUID

Tôi làm cách nào để thực hiện việc này?

Trả lời

8

Hãy thử sử dụng phiên bản phát triển mới nhất của trình điều khiển JDBC (Hiện tại là 8.4dev-700) hoặc đợi phiên bản phát hành tiếp theo. (Edited thêm: 8,4-701 đã được phát hành)

Các release notes đề cập đến sự thay đổi này:

Ánh xạ các loại cơ sở dữ liệu uuid để java.util.UUID. Điều này chỉ hoạt động cho các phiên bản máy chủ tương đối mới (8.3) và JDK (1.5).

+2

này có vẻ là không hiện nay với phiên bản driver 9,2-1002 và hibernate-core 3.3.1.GZ. Có một câu hỏi chưa được trả lời chưa được trả lời tại https://community.jboss.org/thread/229747?_sscc=t. Tôi cũng gặp vấn đề với điều này bằng cách sử dụng GORM. –

0

Trong sử dụng không phải JPA, tôi sẽ tạo UserType để định dạng UUID thành chuỗi mà PostgreSQL chấp nhận, sau đó chỉ cần đặt tên của triển khai UserType làm loại cột.

0

bạn có thể thử với:

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

nơi ColumnDefinition là một mảnh vỡ của SQL mẹ đẻ

0

Có lẽ bạn có thể nhận được loại UUID để được tự động chuyển đổi sang một String (uuid.toString() nên cung cấp biểu diễn 36-char kinh điển)? DB thường chuyển đổi mọi thứ đáng tin cậy giữa các chuỗi và các kiểu gốc.

3

Đây là câu trả lời cho câu trả lời của tôi trên Postgresql UUID supported by Hibernate? ... Tôi biết câu hỏi này cũ, nhưng nếu ai đó tình cờ gặp nó, điều này sẽ giúp họ.

Điều này có thể được giải quyết bằng cách thêm chú thích sau vào UUID:

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

Là tại sao Hibernate không chỉ làm cho điều này thiết lập mặc định, tôi không thể cho bạn biết ...

CẬP NHẬT: Dường như vẫn có sự cố khi sử dụng phương thức createNativeQuery để mở các đối tượng có các trường UUID. May mắn thay, phương pháp createQuery cho đến nay đã làm việc tốt cho tôi.

0

Hãy thử điều này

@Column(name = "UUID", nullable=false, insertable = false, columnDefinition="uuid DEFAULT uuid_generate_v4()") 
private String uuid;