我有實體Foo
,它映射到具有一些唯一約束的sql表。因此保存Foo
可能會失敗。我使用FooDao
保存Foo
:違反約束失敗
@Repository
public class FooDao
{
@Autowired
private SessionFactory sessionFactory;
@Transactional
@Override
public void add(Foo item) {
sessionFactory.save(item);
}
}
當我打電話方法FooDao#add(Foo)
它可能會失敗,原因有二:因爲任何違反唯一約束(在這種情況下,我知道如何處理這個問題),或者因爲一些其他問題(在這個我可能應該傳播異常)。我如何區分這兩種情況?
我可以將方法find(Foo item)
添加到FooDao
並檢查是否類似項目,我試圖添加的是數據庫。但是這需要從數據庫中進行額外的選擇,我對此有點擔心。
在我的情況下,HibernateException將被Spring包裝,但我猜SQLState是我正在尋找的。 –