在行創建鎖使用MySQL和Hibernate 4.3.5Hibernate的重複條目例外在MySQL
我有一個主鍵091210
在Mortgage
表中的一行。在使用休眠的Java應用程序中,當我(錯誤地)嘗試使用相同的密鑰保存抵押貸款時,將記錄正確的com.mysql.jdbc.exceptions.MySQLIntegrityConstraintViolationException: Duplicate entry '091210' for key 'PRIMARY'
例外,並且不會拋出。
問題:
此異常被拋出/登錄然而程序沒有完成,也沒有執行終止。此外,我注意到在原來的行上創建了一個更新/刪除鎖,導致了重複的異常。要恢復的唯一方法是如果我可以手動終止程序,然後該重要行不再是「鎖定」
- 這是預期的,有沒有人經歷過這之前?
- 這怎麼能從Java程序中恢復?
我希望這種異常會取消/中斷事務,然後拋出異常。但是,相反,似乎例外,只是記錄,鎖是在DB創建,過程似乎只是掛在transaction.commit()
...
代碼:
System.out.println("Begin transaction");
session.beginTransaction();
System.out.println("Save mortgage");
session.save(mortgage);
System.out.println("Commit transaction");
session.getTransaction().commit();
System.out.println("Close session");
session.close();
System.out.println("Close SessionFactory");
HibernateUtil.getSessionFactory().close();
相關的輸出我看到:
Begin transaction
Save mortgage
Commit transaction
Hibernate: insert into mortgage (address, last_name, inst_id, date, mortgage_num) values (?, ?, ?, ?, ?)
Mar 30, 2015 7:59:54 PM org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptions
... Caused by: com.mysql.jdbc.exceptions.MySQLIntegrityConstraintViolationException: Duplicate entry '091210' for key 'PRIMARY'
然後程序只是掛起,還是用紅光發光的運行,並在DB的鎖。
沒有try-catch
,沒有記錄。這是來自Eclipse控制檯。
我假設你捕捉到異常,然後將它寫入日誌文件。當你捕捉到它時,你是否會回滾休眠事務?因爲那應該修復鎖定。 – Ractoc 2015-03-30 21:48:19
我的應用程序沒有做任何日誌記錄,也沒有'try-catch'。我將用我執行的代碼更新答案。 – mmcrae 2015-03-30 21:59:16
好吧,如果我可以在15分鐘左右的時間內找到剩餘的空間,那麼明天我會在工作中再考慮一下。 – Ractoc 2015-03-30 22:07:59