मैं डेटाबेस एप्लिकेशन पर काम कर रहा हूं जो ज्यादातर पढ़ने के लिए है, लेकिन एक टेबल है जो ऐप में उपयोगकर्ता आंदोलन रिकॉर्ड करती है और इसमें बड़ी संख्या में लिखते हैं। के लिए हर कुछ हजार लिखते हैं, हम तो जैसे त्रुटि लॉग में कुछ अपवादों को छोड़कर देखें:हाइबरनेट से डुप्लिकेट प्रविष्टि त्रुटियां प्राप्त करना, MySQL को दोष देना है?
[WARN][2009-07-30 11:09:20,083][org.hibernate.util.JDBCExceptionReporter] SQL Error: 1062, SQLState: 23000
[ERROR][2009-07-30 11:09:20,083][org.hibernate.util.JDBCExceptionReporter] Duplicate entry '17011' for key 1
[ERROR][2009-07-30 11:09:20,083][org.hibernate.event.def.AbstractFlushingEventListener] Could not synchronize database state with session
org.hibernate.exception.ConstraintViolationException: Could not execute JDBC batch update
at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:94)
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66)
at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:275)
प्रश्न में तालिका निम्न स्कीमा है:
CREATE TABLE IF NOT EXISTS `my_table` (
`id` int(11) NOT NULL,
`data1` int(11) NOT NULL,
`data2` int(11) NOT NULL,
`timestamp` datetime default NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;
और इसी हाइबरनेट मानचित्रण एक्सएमएल:
<hibernate-mapping>
<class name="mycorp.MyClass" table="my_table">
<id name="id" column="id" type="java.lang.Integer">
<generator class="increment"/>
</id>
<property name="data1" column="data1" type="java.lang.Integer"/>
<property name="data2" column="data2" type="java.lang.Integer"/>
<property name="timestamp" column="timestamp" type="java.util.Date"/>
</class>
</hibernate-mapping>
यह संभव है, हालांकि, संभव है कि हमारे वेबपैप के कई उदाहरण डेटाबेस में एक बार लिख रहे हों, क्योंकि हमारे वेबपैड संदर्भ में संस्करण संख्याएं बिना किसी नए वी आवेदन के ersions। अपने वेब ब्राउज़र में कैश किए गए एप्लिकेशन के पुराने संस्करण वाले ग्राहक इस प्रकार सर्वर के पुराने संस्करणों तक पहुंचेंगे, जिन्हें हम कुछ हफ्तों के बाद बेरोजगार करते हैं।
वैसे भी, मुझे विश्वास नहीं है कि यह समस्या है, लेकिन मुझे संदेह है कि यहां MySQL और Hibernate के बीच कुछ सिंक्रनाइज़ेशन समस्या है। अनुक्रम, seqhilo या हिलो मदद करने के लिए मेरे जनरेटर बदलना होगा? इसके अलावा, यदि आप MySQL में ऐसे जनरेटर को स्थापित करने का एक उदाहरण प्रदान कर सकते हैं, तो यह बहुत उपयोगी होगा, क्योंकि ऑनलाइन संसाधनों में से अधिकांश केवल हाइबरनेट मैनुअल में दुःखद सरल उदाहरणों से कॉपी-पेस्ट किए जाते हैं।
बहुत गहन और स्पष्ट उत्तर - धन्यवाद! –