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
).
This annotation defines the Hibernate type mapping. Using “uuid-char” instructs Hibernate to store the UUID as a String, instead of the binary value. This way, it can be written to and read from a VARCHAR(36) column without the need for any pre-processing on our side.
The UUID data type is considered a subtype of the STRING data type, because UUID values are displayed in their canonical textual format and, in general, behave the same as string values in the various SQL operators and expressions.
In assigning the default value of NEWID() , each new and existing row has a unique value for the CustomerID column.
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With