J'essaie de mapper une colonne UUID
de POJO à une colonne de table SQL Server à l'aide d'Hibernate.
Les annotations sont appliquées comme suit:
@Id
@GeneratedValue
@Column(name = "Id", columnDefinition = "uniqueidentifier")
public UUID getId(){ ... }
Cependant, il semble y avoir un problème d’endianisme entre le mappage Java Hibernate et le serveur SQL.
Par exemple, dans mon application Java, j'ai des identifiants représentés par:
4375CF8E-DEF5-43F6-92F3-074D34A4CE35
ADE3DAF8-A62B-4CE2-9D8C-B4E4A54E3DA1
alors que dans SQL Server, ceux-ci sont représentés par:
8ECF7543-F5DE-F643-92F3-074D34A4CE35
F8DAE3AD-2BA6-E24C-9D8C-B4E4A54E3DA1
Est-il possible d'avoir la même représentation des deux côtés?
Veuillez noter que uniqueidentifier
est utilisé uniquement pour avoir un identifiant typé uniqueidentifier
dans le serveur SQL au lieu du type binary
; le même problème existe lorsque uniqueidentifier
est supprimé de l'annotation (le problème peut être observé en convertissant binary
= uniqueidentifier
).
Vous devez spécifier la @Type(type = "uuid-char")
, voir aussi Problèmes de mappage de l’UUID dans JPA/hibernate .
Vous pouvez également utiliser un champ String
pour l'ID en Java tout en conservant uniqueidentifier
dans SQL Server.
Les bases de données Microsoft utilisent des GUID. C'est l'implémentation par Microsoft du standard UUID.
Ceci étant dit, vous devriez utiliser le générateur de guid.
@Id
@GenericGenerator(name = "generator", strategy = "guid", parameters = {})
@GeneratedValue(generator = "generator")
public String getId() {
return id;
}
guid
utilise une chaîne GUID générée par la base de données sur MS SQL Server et MySQL.
En outre, avez-vous défini SQLServer2012Dialect? Cela pourrait également résoudre certains problèmes futurs.
Avec SQL Server, vous devez utiliser guid strategy pour votre générateur:
@GeneratedValue(generator = "my-uid")
@GenericGenerator(name = "my-uid", strategy = "guid")
@Id
private UUID uuid;
https://docs.jboss.org/hibernate/orm/3.6/reference/en-US/html/mapping.html
Java utilise le générateur UUID en version 4, comment pouvez-vous voir ici:
4375CF8E-DEF5 - 4 3F6-92F3-074D34A4CE35
ADE3DAF8-A62B - 4 CE2-9D8C-B4E4A54E3DA1