我們有一個應用程序需要在創建時檢測某些字段中的重複項。我們使用Hibernate作爲持久層,並使用Spring的HibernateTemplate。我的問題是,在創建之前是否先爲該項目進行前期查找,或嘗試捕獲DataIntegrityViolation異常,然後檢查這是否由重複項導致。使用Spring Hibernate模板檢測重複項的最佳方法
4
A
回答
9
這取決於是否有重複是特殊情況還是業務邏輯情況。
例如,檢查登記時唯一的電子郵件/用戶名是業務邏輯的情況下和檢查應該試圖插入
如果您需要指出哪些字段完全未能通過唯一約束之前完成,則最好事先檢查一下,而不是抓住例外。捕捉異常並不能給你重要的細節 - 哪個領域失敗了。
有一些方法可以根據例外情況獲取這些信息,但它非常繁瑣且是數據庫特定的(查找數據庫中的約束名稱(特定於數據庫),獲取應用的字段,匹配與實體屬性的字段)
1
我絕對去Bozho答案。我認爲這正是關鍵。
我目前正在研究的項目中存在類似的問題。我們在基於過濾器的多個服務器之間共享信息,並且可能存在收到的對象已經添加到數據庫中的情況,因此會發生PK異常。
在我們的案例中,這些PK衝突非常罕見,所以我們認爲這種情況是例外。我們也在使用spring和hibernate,爲了分離這些問題,並且由於Springs Transaction-Definitions,我們使用AOP來捕獲特定的DataIntegrity-Exception並重新運行Transaction,以根據需求進行所需的完整性檢查。
如果您需要使用ExceptionHandlerAdvice的幫助,我可以詳細說明這一點。
4
最好檢查數據庫中是否存在數據。檢查數據庫中是否存在數據的一種簡單方法是讓您的類實現休眠LifeCyle api。 Hibernate允許您在保存之前但在身份與bean關聯之後執行驗證行爲。如果某些邏輯被違反或失敗,則可以否決保存操作。
public class Bean extends Serializable implements org.hibernate.classic.LifeCycle {
public boolean onSave(Session s) {
Query query = session.createQuery(from Bean b where b.field=:field");
query.setParameters("field", this.field);
@SuppressWarnings("unchecked")
List<Bean> beans = query.list();
if (beans != null && !beans.isEmpty()) {
// This does not save the identity.
return VETO;
}
return NO_VETO;
}
}
相關問題
- 1. 最佳方法使用Hibernate
- 2. 使用Jasmine模板測試骨幹視圖的最佳方法
- 3. 檢查重複項時最佳自加入方法
- 4. 帶有Spring JDBC模板的DAO:單元測試的最佳方法
- 5. 將子模板包含到Spring MVC中的模板中的最佳方法
- 6. 檢測IronPython的最佳方法
- 7. Spring hibernate模板類
- 8. 重複JS函數的最佳方法
- 9. Angular:檢測重複對象中菜單項外部點擊的最佳做法
- 10. @Spring Spring方法調用Hibernate
- 11. 測試數據庫中重複密鑰的最佳方法
- 12. 在角度2中重複使用模態的最佳方式
- 13. 重用Java方法的最佳方法
- 14. 檢測移動設備和重定向的最佳方法
- 15. 使用java從模板生成pdf文檔的最佳方法
- 16. Django - 使用Javascript刷新模板中div的最佳方法?
- 17. 使用外部模板與敲除的最佳方法
- 18. 使用LaTeX作爲模板的最佳方法是什麼?
- 19. 使用PHP檢測標籤的最佳方法是什麼?
- 20. 使用javascript/jquery檢測移動瀏覽器的最佳方法?
- 21. 避免代碼重複 - 最佳方法
- 22. 用於大規模近似重複檢測文檔的最新方法?
- 23. Python:使用集合檢測重複項
- 24. Spring MVC Web應用程序檢測蠻力攻擊的最佳方法?
- 25. 在maven中複製多模塊項目的最佳方法
- 26. 使用片段時避免重複代碼的最佳方法
- 27. 集成測試Spring mysql應用程序的最佳方法?
- 28. 使用Seam&Hibernate重試交易的最佳方式
- 29. 在多模塊Maven項目中使用的最佳方法?
- 30. 使用@配置方法的Hibernate Spring MVC