簡體   English   中英

如何使用UUID作為休眠實體的主鍵?

[英]How to use UUID as primary key for Hibernate Entity?

我正在嘗試在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。

我將密鑰定義為String:

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;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM