2017-01-14 4 views
9

Hibernateを使用してPOJOのUUIDカラムをSQL Serverテーブルのカラムにマップしようとしています。Java HibernateとSQL ServerのUUIDの表現が異なります

次のように注釈が適用されます。

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

しかし、JavaのHibernateのマッピングおよびSQLサーバの間にいくつかのエンディアンの問題があるようです。

例えば、私のJavaアプリで、私のように表さIDS持っている:SQL Serverで、これらは次のように表現されるのに対し、

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

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

を同じ表現を持っているどのような方法があります両側に?

uniqueidentifierは、タイプbinaryの代わりにuniqueidentifierの型付きIDをSQLサーバーに持つためにのみ使用されています。アノテーションからuniqueidentifierが削除された場合にも同じ問題が発生します(binaryuniqueidentifierに変換されることによって問題が発生する可能性があります)。

+0

はhttp://stackoverflow.com/questions/5745512/how-to-read-a-net-guid-into-a-java-uuidに関連しています –

+0

はhttp://stackoverflow.com/questionsに関連しています/ 22402929/uuid-madness-with-mssql –

+0

関連:https://stackoverflow.com/a/48918942/2102158 –

答えて

1

のSQL Serverを使用すると、あなたの発電機のためGUID戦略を使用する必要があります。

@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はバージョン4にUUIDジェネレータを使用している

はどのようにあなたがここに見ることができます:

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

ADE3DAF8-A62B- CE2-9D8C-B4E4A54E3DA1は

4

またProblems mapping UUID in JPA/hibernate参照、@Type(type = "uuid-char")を指定する必要があります。

また、StringフィールドをJavaのidに使用し、SQL Serverにuniqueidentifierを保持することもできます。

2

MicrosoftデータベースはGUIDを使用します。マイクロソフトのUUID標準の実装です。

これは、guidジェネレータを使用する必要があります。

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

​​MS SQL Serverと MySQLでデータベースが生成するGUID文字列を使用しています。

さらに、SQLServer2012Dialectを設定しましたか?これは将来のいくつかの問題を解決するかもしれない。

関連する問題