प्रतिबद्ध करता है हमारे पास कई तालिकाओं पर एक साधारण ऑडिटिंग सिस्टम है। यह सब ठीक काम करता है, लेकिन हर एक बार ही सही, हम इस तरह एक त्रुटि एक ऑपरेशन आग करने के लिए ट्रिगर का कारण बनता है पर मिलता है:MySQL ट्रिगर किसी भी तरह से
java.sql.SQLException: Explicit or implicit commit is not allowed in stored function or trigger.
दुर्भाग्य से, हम को समझ नहीं सकता कि किस तरह हमारे चलाता एक प्रतिबद्ध कारण बन सकता है ।
ये ट्रिगर हैं कि (कभी कभी) त्रुटि का कारण: अनुरोध पर show variables like '%commit%'
Variable_name Value
innodb_commit_concurrency 0
innodb_flush_log_at_trx_commit 1
संपादित 2
त्रुटि के उत्पादन:
CREATE
TRIGGER `my_schema`.`fileDescriptorInsertTrigger`
AFTER INSERT ON `my_schema`.`FILE_DESCRIPTOR`
FOR EACH ROW
insert into `AUDIT_EVENT`
(`applicationId`,`classifier`,`lastModified`)
values
(NEW.application,'FILE_AND_DIR',NOW())
on duplicate key
update lastModified=NOW();
CREATE
TRIGGER `my_schema`.`fileDescriptorUpdateTrigger`
AFTER UPDATE ON `my_schema`.`FILE_DESCRIPTOR`
FOR EACH ROW
update `AUDIT_EVENT`
set lastModified=NOW()
where classifier='FILE_AND_DIR'
and applicationId=NEW.application;
CREATE
TRIGGER `my_schema`.`fileDescriptorDeleteTrigger`
AFTER DELETE ON `my_schema`.`FILE_DESCRIPTOR`
FOR EACH ROW
update `AUDIT_EVENT`
set lastModified=NOW()
where classifier='FILE_AND_DIR'
and applicationId=OLD.application;
संपादित करें केवलपर होने के बाद होता है, जो इसे INSERT TRIGGER
तक सीमित कर देगा लेकिन फिर भी मुझे कोई संकेत नहीं है कि यह प्रतिबद्धता कैसे पैदा कर सकता है।
हम इस के शीर्ष पर हाइबरनेट है, तो यह वास्तव में हाइबरनेट है कि आवेषण कर रहा है, और हम भी AUDIT_EVENT
मेज पर मैप किया गया एक इकाई है, लेकिन हाइबरनेट (चाहिए) कभी नहीं AUDIT_EVENT
तालिका को लिखें।
यदि मैंने मदद की है तो मैंने full stacktrace अपलोड किया है।
'शो प्रतिबद्धता' जैसे '% प्रतिबद्ध%' 'pls के पोस्ट परिणाम। मुझे लगता है कि आपने auto_commit – ravnur
को बंद कर दिया है, मैंने आपके मूल पोस्ट को आपके द्वारा अनुरोधित आउटपुट के साथ संपादित किया है। – Mopper
बिल्कुल 'टेबल' इनओडीबी टेबल में शामिल सभी टेबल हैं? यदि आप स्टोरेज इंजन मिश्रण कर रहे हैं तो आप खुद को परेशानी में डाल सकते हैं। – jeremycole