2010-07-15 5 views
1

J'essaie d'utiliser UUID dans Hibernate.Comment utiliser UUID comme clé primaire pour Hibernate Entity?

Demandez la description de base de classe @Entity suivante (avec @MappedSuperclass annotation):

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

public UUID getId() 
{ 
    return id; 
} 

Pour le test, je suis en train de lire toutes les entités de ma classe de base de données (base de données existe, les enregistrements existent). Ma base de données est PostgreSQL 8.4 avec le support UUID et la clé primaire est de type UUID.

Courir mon test, je reçois le texte suivant dans le journal:

[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) 

On dirait que Hibernate n'utilise pas vraiment le type UUID il peut analyser de mon entité Description annotée. La même situation avec Spring au lieu de UUID.

Sinon, comment puis-je dire Hibernate Je voudrais utiliser soit UUID ou String au lieu de Long pour la clé primaire?

PS: Hibernate J'utilise 3.3.2.GA. Je n'utilise pas EntityManager. Je décris le mapping avec des annotations et configure Hibernate avec Spring.

Répondre

3

Je typer la clé sous forme de chaîne:

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