当前位置: 首页 > 知识库问答 >
问题:

JOOQ插入记录列表

蒋硕
2023-03-14

目前我正在从pojos列表映射到记录,我希望能够一次插入多行。我如何在JOOQ中用一个事务做到这一点?

 List<Record> recordList = receiverList.stream().map(r -> {
        return dslContext.newRecord(Table, r);
    }).collect(Collectors.toList());

我曾尝试将列表放入“值”中,但出现异常“值的数量必须与字段的数量匹配”

dslContext.insertInto(Table).values(recordList);

共有2个答案

虞承泽
2023-03-14

你也可以做:

var insertStepN = dslContext.insertInto(Table).set(dslContext.newRecord(Table, recordList.get(0));
for (var record : recordList.subList(1, recordList.size()) {
  insertStepN = insertStepN.newRecord().set(dslContext.newRecord(Table, record));
}
insertStepN.returning().fetch().into(YourClass.class);

这样,您可以使用returning()返回插入的值,而使用batchInsert()则无法返回。

濮丰
2023-03-14

您的错误是因为。值(...)正在等待字段值而不是记录。

也许你可以批量执行:

dslContext.batchInsert(recordList);

正如Lukas提到的,它将在一个原子的jdbc语句中执行它

 类似资料:
  • 我有一个表USER\u ROLES,有5列。此外,还有一个类UserRole,其字段和名称的数量与USER\u角色相同。 我试图插入一行而不指定列名: 但是当我尝试创建行时,我得到了这个错误: 我必须指定列名吗?

  • 所以我只使用Jooq来构建查询,而不是执行查询,如下所示: 对象可以执行查询conn.asyncExecute(org.jooq.query query)。所以我的问题是,如何创建类型为org.jooq的批插入查询。查询?具体来说,给定一个列表 请注意,我知道其他问题询问如何使用Jooq进行批处理插入,但他们使用Jooq执行查询就像下面Jose Martinez的回答一样,而这里我只使用Jooq构

  • OrientDB是一个NoSQL数据库,可以存储文档和面向图形的数据。 NoSQL数据库不包含任何表,那么要如何将数据作为记录插入?在这里,您可以以类,属性,顶点和边的形式查看表数据,类表就像表,属性就像表中的文件。 可以在OrientDB中使用模式定义所有这些实体。 属性数据可以被插入到一个类中。 插入命令在数据库模式中创建一条新记录。 记录可以无模式或遵循一些指定的规则。 以下语句是“插入记录

  • Jooq生成器是否支持扩展提供给生成器的自定义类? 我想生成扩展自定义提供类的记录,该类将扩展TableRecordImpl。 我想进入继承链,其中UpdateableRecordImpl将扩展MyRecord,MyRecord将扩展TableRecordImpl?

  • 我有一个简单的方法(使用jooq),基本上是这样做的: 在表'MY_OBJECT'中,我有一个字段'id',其定义为: 每当我运行上面提到的代码时,都会出现错误: 在我看来,问题是jOOq试图将值写入标识列。MyConvertor将其保留为null的原因是,该值将由db生成。如何使jooq不尝试向该字段写入null?

  • 问题内容: 我正在尝试将Envers集成到我的项目中。我正在使用Hibernate-envers 3.5.5-Final,Hibernate-core 3.5.5-Final,spring 3.0.7.RELEASE。 对于DAO层,我使用的是GenericDaoHibernate类。 我的applicationContext.xml包含: 创建带注释的类的审核表,但是通过在实体表中添加或更新一行