我正在使用以下 PostgreSQL 函数从数据库中的表中删除记录。
CREATE OR REPLACE FUNCTION deletesegment(segid bigint) RETURNS integer AS
$BODY$
DECLARE
rowsAffected integer := 0;
BEGIN
DELETE FROM segment
WHERE
id = segid;
GET DIAGNOSTICS rowsAffected = ROW_COUNT;
RETURN rowsAffected;
EXCEPTION
WHEN foreign_key_violation THEN
RAISE EXCEPTION foreign_key_violation;
END;
$BODY$
LANGUAGE plpgsql;
上表的主键列(即段表的 id 列)被另一个表引用为外键,当我执行上述函数从另一个表引用的段表中删除一条记录时,函数按预期引发错误(如下所示)。
ERROR: foreign_key_violation
********** Error **********
ERROR: foreign_key_violation
SQL state: 23503
现在我从使用 Hibernate 的 Java 代码中调用这个 PostgreSQL 函数,如下所示,
public int deleteSegment(Long segmentId) {
SQLQuery query = (SQLQuery)sessionFactory.getCurrentSession().createSQLQuery("SELECT deletesegment(:segmentId)")
.setParameter("segmentId", segmentId);
int rows = (Integer)(query.list().get(0));
return rows;
}
当我将相同的 id 传递给上述函数时 (Integer)(query.list().get(0)) 执行而不引发任何异常并返回 0。鉴于基础 PostgreSQL 函数正在引发,我希望它会引发异常一个例外。但事实并非如此。
我究竟做错了什么。如何在 Java 代码中引发异常?
提前致谢..!!