Different representation of UUID in Java Hibernate and SQL Server

I am trying to map a UUID column in POJO to SQL Server table column using Hibernate.

The annotations are applied as follows:

@Id
@GeneratedValue
@Column(name = "Id", columnDefinition = "uniqueidentifier") 
public UUID getId(){ ... }

However, it seems that there is some endianness problem between the Java Hibernate mapping and SQL server.

For example, in my Java app, I have ids represented as:

4375CF8E-DEF5-43F6-92F3-074D34A4CE35
ADE3DAF8-A62B-4CE2-9D8C-B4E4A54E3DA1

whereas in SQL Server, these are represented as:

8ECF7543-F5DE-F643-92F3-074D34A4CE35
F8DAE3AD-2BA6-E24C-9D8C-B4E4A54E3DA1

Is there any way to have same representation at both sides?

Please note that uniqueidentifier is used only to have a uniqueidentifier typed id in SQL server instead of type binary; the same problem exists when uniqueidentifier is removed from annotation (the problem can be observed by converting binary is to uniqueidentifier).


You need to specify the @Type(type = "uuid-char") in addition to @Column(name="...", columnDefinition = "uniqueidentifier"), see also Problems mapping UUID in JPA/hibernate .

Alternatively you can use a String field for the id in Java and still keep uniqueidentifier in SQL Server.


Microsoft databases use GUIDs. It is Microsoft's implementation of the UUID standard.

This being said, you should use the guid generator.

@Id
@GenericGenerator(name = "generator", strategy = "guid", parameters = {})
@GeneratedValue(generator = "generator")
public String getId() {
    return id;
}

guid uses a database-generated GUID string on MS SQL Server and MySQL.

Also, have you set SQLServer2012Dialect? This also might solve some future issues.


With SQL Server you should use guid strategy for your generator:

@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 is using UUID generator in version 4 how can you see here:

4375CF8E-DEF5-43F6-92F3-074D34A4CE35

ADE3DAF8-A62B-4CE2-9D8C-B4E4A54E3DA1