我无法让Hibernate使用PostgreSQL的java.util.UUID。
这是使用javax.persistence。*批注的映射:
private UUID itemUuid; @Column(name="item_uuid",columnDefinition="uuid NOT NULL") public UUID getItemUuid() { return itemUuid; } public void setItemUuid(UUID itemUuid) { this.itemUuid = itemUuid; }
当持久化一个临时对象时,我得到一个SQLGrammarException:
column "item_uuid" is of type uuid but expression is of type bytea at character 149
PostgreSQL版本是8.4.4 JDBC驱动程序-8.4.4-702(也尝试过9.0-相同) Hibernate版本是3.6,主要配置属性:
<property name="hibernate.dialect">org.hibernate.dialect.PostgreSQLDialect</property> <property name="hibernate.connection.driver_class">org.postgresql.Driver</property> <property name="hibernate.connection.url">jdbc:postgresql://192.168.1.1/db_test</property>
可以通过在UUID中添加以下注释来解决此问题:
import org.hibernate.annotations.Type; ... @Type(type="pg-uuid") private java.util.UUID itemUuid;
至于为什么Hibernate不仅将其设为默认设置,我无法告诉您…
更新:使用createNativeQuery方法打开具有UUID字段的对象似乎仍然存在问题。幸运的是,到目前为止,createQuery方法对我来说还不错。