假设我将表定义为:
CREATE TABLE ITEMS(
ID BIGINT PRIMARY KEY,
NAME VARCHAR2,
CONSTRAINT NAME_IS_UNIQUE UNIQUE (NAME)
);
重要的部分是NAME_IS_UNIQUE
约束。
对应的 POJO 项为:
class Item{
private Long id;
private String name;
/** getters and setters */
}
和 SQL-Object 接口,其方法定义为:
@SqlUpdate("insert into items(id, name) values(:id, :name)")
int insert(@BindBean Item itemToInsert);
如果我尝试使用已经存在的 NAME 插入到项目中,那么我将获得关于约束 NAME_IS_UNIQUE 违规的数据库供应商特定的 SQLException。
有没有办法提供 SQLException 和应用程序特定异常(例如 ItemNameUniqueConstraintException)之间的映射,所以insert
方法本质上将其签名更改为类似于下面的签名?
@SqlUpdate("insert into items(id, name) values(:id, :name)")
int insert(@BindBean Item itemToInsert) throws ItemNameUniqueConstraintException;
问题不是关于特定的 UNIQUE 约束,而是更多关于一般情况的问题,其中 SQLException 可以是任何事情:比如违反引用完整性或违反检查约束等。