के साथ संशोधितडेटा टाइप रीफैक्टरिंग का उपयोग करके BIGINT में एक आईएनटी ऑटोइनक्रिकमेंट कॉलम बदलें, मेरे पास एक प्राथमिक कुंजी कॉलम है जो एक आईएनटी कॉलम है जिसे मैं बिगिनट में बदलना चाहता हूं। हमारा परीक्षण और उत्पादन पर्यावरण MySQL का उपयोग करता है, लेकिन यूनिट परीक्षणों के लिए हम एम्बेडेड एच 2 डेटाबेस का उपयोग करते हैं।लिक्विबेस: H2 डेटाबेस
मैं निम्नलिखित Liquibase रिफैक्टरिंग बनाया है:
...
<changeSet id="1" author="trond">
<modifyDataType tableName="event" columnName="id" newDataType="BIGINT" />
<rollback>
<modifyDataType tableName="event" columnName="id" newDataType="INT" />
</rollback>
</changeSet>
...
रिफैक्टरिंग काम करता है, लेकिन जब मैं डेटाबेस हाइबरनेट का उपयोग करने के लिए एक वस्तु बने रहने की कोशिश करते हैं, मैं निम्न त्रुटि संदेश (मैं त्रुटि लपेटा गया है मिल संदेश):
ERROR org.hibernate.util.JDBCExceptionReporter [main]: NULL not allowed for column "ID";
SQL statement: insert into event (id, eventtime, guid, meta, objectguid, originatorid, subtype, type) values (null, ?, ?, ?, ?, ?, ?, '0') [90006-140]
JDBC exception on Hibernate data access:
SQLException for SQL [insert into event (id, eventtime, guid, meta, objectguid, originatorid, subtype, type) values (null, ?, ?, ?, ?, ?, ?, '0')];
SQL state [90006]; error code [90006]; could not insert: [event.MyEvent];
nested exception is org.hibernate.exception.GenericJDBCException: could not insert: [event.MyEvent]
MyEvent वर्ग एक AbstractBaseEvent जो कोड में निम्नलिखित हाइबरनेट मानचित्रण परिभाषित किया गया है से विरासत:
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private long id;
कुछ अंक:
- हाइबरनेट मानचित्रण डेटा प्रकार की पुनर्रचना से पहले काम करता है
- Liquibase का संस्करण 2.0.1
- किया जाए या नहीं इस के साथ MySQL अभी तक परीक्षण नहीं किया गया काम करता है
बहुत अच्छा विश्लेषण - धन्यवाद। SEQUENCE का उपयोग करने के साथ मैं एकमात्र समस्या देखता हूं कि MySQL अनुक्रमों का समर्थन नहीं करता है। एक विकल्प अनुक्रम तालिका का उपयोग करना है जिसे हमने किसी अन्य मामले में उपयोग किया है। – tronda
अच्छा विचार - तालिका का उपयोग करना सबसे पोर्टेबल है वैसे भी। –
यदि पोर्टेबिलिटी आपकी चिंता है, तो मूल रूप से कोई सवाल नहीं है: आपको '@ TableGenerator' का उपयोग करना होगा। –