我有实体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是我正在寻找的。 –