【问题标题】:JTS - Hibernate + Postgres + UUID conflictJTS - Hibernate + Postgres + UUID 冲突
【发布时间】:2017-04-03 02:49:39
【问题描述】:

我正在使用 Hibernate 5.0 + Postgres 9.4

我的实体使用UUIDs 作为标识符。

该项目还使用hibernate-spatial

id 属性被简单注释为

@Id
@GeneratedValue
private UUID id;

在持久化任何实体(不仅是具有几何数据的实体)后,我收到以下错误:

column "id" is of type geometry but expression is of type uuid

看起来我的类型映射存在一些冲突;虽然我不是 Hibernate 类型映射方面的专家。

有没有人可以帮我解决这个问题?

【问题讨论】:

  • 数据库中ID的列是什么类型?
  • @SubOptimal 创建为geometry,因为UUIDGeometry都映射到java.sql.Types.OTHER
  • 你的意思是你有CREATE TABLE some_table (id geometry, ...),现在想将UUID映射到它?
  • @SubOptimal 不。 Schema(在开发模式下)由 Hibernate 创建。只要我没有添加空间集成 (hibernate-spatial:5.0.7),UUID 字段就会正确创建为pg-uuid。添加空间内容后,由于java.util.UUIDcom.vividsolutions.Geometry 都映射到java.sql.Types.OTHER,映射发生了变化。现在,问题是如何解决这个映射冲突。
  • 也许这可能是解决方案stackoverflow.com/questions/4495233/…

标签: java postgresql hibernate hibernate-spatial


【解决方案1】:

查看this answer 和原始discussion thread

指定columnDefinition = "uuid" 为我解决了完全相同的问题。

@Entity
public class MyEntity {
    @Id
    @GeneratedValue
    @Column( columnDefinition = "uuid", updatable = false )
    public UUID getId() {
        return id;
    }
}

【讨论】:

    猜你喜欢
    • 2010-10-20
    • 1970-01-01
    • 1970-01-01
    • 2015-03-07
    • 1970-01-01
    • 1970-01-01
    • 2016-01-04
    • 2014-11-17
    • 2019-08-15
    相关资源
    最近更新 更多