java - Jooq 一次将 one2one 和 one2many 关系数据插入到 2 个表中。如何处理问题和回滚
问题描述
铁模型
class Author {
id, name
}
class Book {
id, title, author
}
create table author (
id bigint not null auto_increment,
name varchar,
CONSTRAINT author_pk PRIMARY KEY (id),
);
create table book (
id bigint not null auto_increment,
title varchar,
author_id bigint,
CONSTRAINT book_pk PRIMARY KEY (id),
CONSTRAINT book_fk_author FOREIGN KEY (author_id) REFERENCES author (id) ON DELETE NO ACTION ON UPDATE NO ACTION
)
如何在jooq中一次插入?如果某些查询失败,如何处理回滚?它必须在我这边编程吗?我在文档中找不到关于这种情况的消息:(
我应该像手动一样:
- 按名称在数据库中查找作者 ID
- 如果作者不存在插入新作者
- 插入带有作者 ID 的书
- 如果书籍插入失败,那么如果这次插入则删除作者?
如何处理?你有这方面的例子吗?
编辑:我使用 h2 数据库
解决方案
数据库中的所有更改都是事务性的。
如果 on 操作失败,您可以回滚事务,然后数据库中将没有任何数据。所以没有必要删除一些东西。
请阅读文档中有关事务管理的部分: https ://www.jooq.org/doc/3.14/manual-single-page/#transaction-management
推荐阅读
- javascript - React 应用程序中的字典数据
- arrays - 在 React 中,如何更新支持状态为数组的文本表单字段?
- google-bigquery - Bigquery:根据亲属表查找家族
- c - MPI 通信是否被视为程序并行部分的一部分
- oracle - EBCDIC 数据加载到 oracle
- c++ - 使用递归将整数值数组以相反的顺序输出到屏幕
- swift - 在 Swift 中解析多部分 SOAP 响应
- javascript - 异步/等待语法:有没有办法定义一个代码块在函数之后执行而不阻塞执行?
- entity-framework - ValidationMessageFor 未显示某些字段?MVC 英孚
- python - 重启后无法建立连接