java - 使用 Spring JPA 和 Hibernate 更新数据库分区上的记录时出错
问题描述
我在更新 Hibernate 实体时遇到异常,以下是详细信息 -
我创建了如下表分区
--case
--case_active
--case_inactive
- - - - - - - -脚本 - - - - - -
CREATE TABLE user_active (
CHECK (case_state <>'CLOSED')
) INHERITS (case);
CREATE TABLE case_inactive (
CHECK (case_state ='CLOSED')
) INHERITS (case);
------------ Update Triggers-------------
-- Trigger for - active case (closing) -- Move record from active_case to inactive_case
CREATE OR REPLACE FUNCTION active_case_partition_trigger_fn()
RETURNS TRIGGER AS $$
BEGIN
IF (NEW.case_state = 'CLOSED' ) THEN
INSERT INTO case_inactive VALUES (NEW.*);
DELETE FROM case_active WHERE case_id = NEW.case_id;
--RETURN NULL;
END IF;
RETURN NEW;
END;
$$
LANGUAGE plpgsql;
CREATE TRIGGER active_case_partition_trigger
BEFORE UPDATE ON case_active
FOR EACH ROW EXECUTE PROCEDURE active_case_partition_trigger_fn();
-- Trigger for - Inactive case (Reopening) -- Move record from inactive_case to active_case
CREATE OR REPLACE FUNCTION inactive_case_partition_trigger_fn()
RETURNS TRIGGER AS $$
BEGIN
IF (NEW.case_state <> 'CLOSED') THEN
INSERT INTO case_active VALUES (NEW.*);
DELETE FROM case_inactive WHERE case_id = NEW.case_id;
update movement set active = true where document_id = new.case_id;
--RETURN NULL;
END IF;
RETURN NEW;
END;
$$
LANGUAGE plpgsql;
CREATE TRIGGER inactive_case_partition_trigger
BEFORE UPDATE ON case_inactive
FOR EACH ROW EXECUTE PROCEDURE inactive_case_partition_trigger_fn();
更新休眠实体“案例”(映射到“案例”表)的异常 -
org.springframework.orm.jpa.JpaOptimisticLockingFailureException:行已被另一个事务更新或删除(或未保存值映射不正确)
解决方案
它与您的级联和类图相关,您正在保存一些无法自行保存的对象。
您应该检查您的级联和类图,但您也可以单独保存它们,例如在第一步保存用户,然后将该用户设置为案例对象并保存案例。
推荐阅读
- c# - 有没有一种更高效的方法来使用反射从循环内的 propertyName 获取类的属性值?
- powerbi - 在 DAX 中计数/计算/求和行
- python - 将字符打印与特定值一样多次
- python - 使用 Python,选择最近 60 天内修改过的目录中的文件
- abap - 如何在双击事件中获取 SALV ALV 字段值?
- python - 在pytorch模型训练中,如何冻结、解冻和再次冻结一些参数?
- javascript - Power BI 自定义主题文件未与 Angular 一起应用
- javascript - 如何在响应对象NodeJs的模板文字中插入html标签
- php - 将选定行的 id 传递给刀片文件中的组件标签
- angular - 在孩子中使用父属性(高度,宽度)