我正在使用以下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
现在我从我的Java代码调用这个PostgreSQL函数,它使用Hibernate如下所示,
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代码中提出异常?
感谢提前...!!
您的问题几乎可以肯定是Hibernate正在为您缓存查询。您必须研究如何为此禁用查询缓存。
Hibernate有许多不同的缓存类型,其中一种是二级缓存,用于缓存数据库查询结果并进行备份。这可能是你必须禁用的。
对于一些开始的想法,请查看另一个问题:
如何禁用Hibernate缓存
我的用它的作用域启动coroutine 我的只处理一些逻辑,在本例中是某种验证器 然后我的只处理网络层/本地层 以下是我得到的错误日志: 错误直接指向显式的语句。
我有以下代码。 然而,它没有捕捉到所有的错误,我仍然得到“throw er//未处理的“错误”事件。 这是为什么呢? 例如,直到我添加了一个特定的错误处理程序,它才捕获parse()函数中的错误。即使不添加,我的try/catch是否应该捕获此错误? 提前致谢!
我已经使用C#(库项目)和Aspect(AOP)编写了Azure函数v1用于日志记录。我在catch块中没有得到异常。 捕获异步方法引发的异常 我有上面讨论的相同问题,但Azure函数运行方法是异步任务,其异常处理和异步void相同。不确定哪里有问题?假设这是函数SDK问题。 Azure函数 记录器方面 解决方法:当我从Azure函数中删除异步等待并通过“getWaiter().GetResult
我正在尝试创建一个过滤器来处理异常(请参见在JSF中处理未捕获的异常) 我在日志中看到错误: 我做错了什么?
我不知道为什么会这样,但当我有: 错误消失了。 更新这是我的完整html代码:
问题内容: 好,我有问题。如果在处理HTTP请求时发生未捕获的异常,则我没有机会在http.ServerResponse对象上调用end()方法。因此,服务器将永远挂起并且永远不会满足该请求。 这是一个例子: 如果访问/ error,则会发生异常,但会被捕获。用户收到错误消息-没问题。但是,如果我访问/ hang,服务器最终将抛出未捕获的异常并永远挂起。以后对/ hang的任何请求都将挂起。 糟透