【问题标题】:How to use UUID as primary key for Hibernate Entity?如何使用 UUID 作为 Hibernate Entity 的主键?
【发布时间】:2010-07-15 10:33:04
【问题描述】:

我正在尝试在 Hibernate 中使用 UUID。

具有以下@Entity 基类描述(带有@MappedSuperclass 注释):

 @Id
 @Column(name="id")
 private UUID id;

 public UUID getId()
 {
  return id;
 }

为了测试,我正在尝试从数据库中读取我班级的所有实体(数据库存在,记录存在)。我的数据库是支持 UUID 的 PostgreSQL 8.4,主键是 UUID 类型。

运行我的测试,我在日志中得到以下信息:

[junit] 14:21:34,839  INFO LongType:203 - could not read column value from result set: id0_0_; Bad value for type long : d46668b8-e494-42ba-803f-c43524ac3f31

...

[junit] org.postgresql.util.PSQLException: Bad value for type long : d46668b8-e494-42ba-803f-c43524ac3f31
[junit]     at org.postgresql.jdbc2.AbstractJdbc2ResultSet.toLong(AbstractJdbc2ResultSet.java:2796)
[junit]     at org.postgresql.jdbc2.AbstractJdbc2ResultSet.getLong(AbstractJdbc2ResultSet.java:2019)
[junit]     at org.postgresql.jdbc2.AbstractJdbc2ResultSet.getLong(AbstractJdbc2ResultSet.java:2431)
[junit]     at org.apache.commons.dbcp.DelegatingResultSet.getLong(DelegatingResultSet.java:240)
[junit]     at org.hibernate.type.LongType.get(LongType.java:51)
[junit]     at org.hibernate.type.NullableType.nullSafeGet(NullableType.java:184)
[junit]     at org.hibernate.type.NullableType.nullSafeGet(NullableType.java:173)
[junit]     at org.hibernate.loader.Loader.getKeyFromResultSet(Loader.java:1121)

看起来 Hibernate 并没有真正使用 UUID 类型,它可能从我的实体注释描述中解析出来。使用 Spring 而不是 UUID 的情况相同。

我还能如何告诉 Hibernate 我想使用 UUID 或 String 而不是 Long 作为主键?

PS:休眠我使用 3.3.2.GA。我不使用EntityManager。我用注解描述映射并用 Spring 配置 Hibernate。

【问题讨论】:

    标签: java hibernate postgresql uuid


    【解决方案1】:

    我将键类型化为字符串:

    private UUID id;
    
    @Id
    @Column(name="id")
    public String getId()
    {
        return id.toString();
    }
    
    public void setId(String value)
    {
        id = UUID.fromString(value);
    }
    
    public UUID idAsUUID()
    {
        return id;
    }
    

    【讨论】:

      猜你喜欢
      • 2015-08-14
      • 1970-01-01
      • 2020-11-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-20
      • 2015-10-27
      • 1970-01-01
      相关资源
      最近更新 更多