2017-01-14 7 views
9

में यूयूआईडी के विभिन्न प्रतिनिधित्व I POBO में UUID कॉलम को Hibernate का उपयोग करके SQL सर्वर तालिका कॉलम में मैप करने का प्रयास कर रहा हूं।जावा हाइबरनेट और SQL सर्वर

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

हालांकि, ऐसा लगता है कि वहाँ जावा हाइबरनेट मानचित्रण और एसक्यूएल सर्वर के बीच कुछ endianness समस्या यह है कि:

एनोटेशन इस प्रकार लागू होते हैं।

एसक्यूएल सर्वर में जबकि
4375CF8E-DEF5-43F6-92F3-074D34A4CE35 
ADE3DAF8-A62B-4CE2-9D8C-B4E4A54E3DA1 

, इन प्रतिनिधित्व कर रहे हैं के रूप में:

उदाहरण के लिए, मेरी जावा अनुप्रयोग में, मैं प्रतिनिधित्व किया आईडी के रूप में है

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

वहाँ एक ही प्रतिनिधित्व करने के लिए कोई तरीका है दोनों तरफ?

कृपया ध्यान दें कि uniqueidentifier केवल uniqueidentifier टाइप किया गया है ताकि binary टाइप करने के बजाय SQL सर्वर में टाइप आईडी हो; एक ही समस्या तब मौजूद होती है जब uniqueidentifier एनोटेशन से हटा दिया जाता है (binary को परिवर्तित करके समस्या देखी जा सकती है uniqueidentifier)।

+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

एसक्यूएल सर्वर के साथ आप अपने जनरेटर के लिए 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

जावा संस्करण 4 में UUID जनरेटर का उपयोग कर रहा है कि कैसे आप यहाँ देख सकते हैं:

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

ADE3DAF8-A62B- CE2-9D8C-B4E4A54E3DA1

4

आप @Type(type = "uuid-char") निर्दिष्ट करने के लिए, यह भी Problems mapping UUID in JPA/hibernate देखने की जरूरत है।

वैकल्पिक रूप से आप जावा में आईडी के लिए String फ़ील्ड का उपयोग कर सकते हैं और अभी भी SQL सर्वर में uniqueidentifier रख सकते हैं।

2

माइक्रोसॉफ्ट डेटाबेस GUID का उपयोग करते हैं। यह यूयूआईडी मानक के माइक्रोसॉफ्ट के कार्यान्वयन है।

यह कहा जा रहा है कि आपको गाइड जनरेटर का उपयोग करना चाहिए।

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

guid एमएस एसक्यूएल सर्वर और MySQL पर एक डेटाबेस से जनरेट की GUID स्ट्रिंग का उपयोग करता है।

इसके अलावा, क्या आपने SQLServer2012Dialect सेट किया है? यह कुछ भविष्य के मुद्दों को भी हल कर सकता है।