gpt4 book ai didi

java - PostgreSQL 函数上的 Hibernate executeUpdate()

转载 作者:行者123 更新时间:2023-11-29 14:05:10 24 4
gpt4 key购买 nike

我正在使用 hibernate 和 PostgreSQL 中的一个函数来更新数据库中的记录。

以下是PostgreSQL函数,

    CREATE OR REPLACE FUNCTION updatesegment(segid bigint, segname text, segdesc text, segmeta text)
RETURNS void AS
$BODY$
BEGIN
UPDATE segment
SET
name = segname,
description = segdesc,
segmentmetadata = segmeta
WHERE
id = segid;
END;
$BODY$
LANGUAGE plpgsql;

在 java 代码中,我调用了如下函数。

public int updateSegment(Long segmentId, String segName, String segDesc, String segMeta) {

SQLQuery query = (SQLQuery)sessionFactory.getCurrentSession().createSQLQuery("SELECT updatesegment(:segmentId, :segName, :segDesc, :segMeta)")
.setParameter("segmentId", segmentId)
.setParameter("segName", segName)
.setParameter("segDesc", segDesc)
.setParameter("segMeta", segMeta);

int rows = query.executeUpdate();

return rows;
}

当我使用正确的输入参数调用上面的 updateSegment() java 函数时,数据库中的记录会按预期更新。但是 query.executeUpdate() 总是在应该返回 1 的地方返回 0。

我做错了什么,为什么 executeUpdate() 不返回 1?

提前致谢...!!!

最佳答案

为了在您的函数中获得受影响的行,您需要进行一些更改:

CREATE OR REPLACE FUNCTION updatesegment(segid bigint, segname text, segdesc text, segmeta text)
RETURNS integer AS
$BODY$
DECLARE
rowsAffected integer := 0;
BEGIN
UPDATE segment
SET
name = segname,
description = segdesc,
segmentmetadata = segmeta
WHERE
id = segid;
GET DIAGNOSTICS rowsAffected = ROW_COUNT; --here you get the affected rows
END;
$BODY$
LANGUAGE plpgsql;

然后您还应该相应地修改您的 java 代码以执行 SELECT 查询调用您的函数并检索它将返回的整数。

来源: PostreSQL Documentation

关于java - PostgreSQL 函数上的 Hibernate executeUpdate(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18132898/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com