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

Spring Data JPA批量标识符生成

微生自怡
2023-03-14

我有一个实体,除了主键之外,还应该为它生成一个额外的唯一标识符:

@Entity
class MyEntity(
   val otherId: String // <- this id is unique as well
) {
    @Id
    @Generated
    var id: UUID // PK
}

otherId 属性值通过调用 SELECT nextval(...) 并添加前缀字符串,从 postgres 序列值派生而来。当我执行大容量插入时,我必须求助于在我的JPA存储库中为实体定义的自定义查询,该查询一次检索多个序列值,但我想使此过程自动进行。

我尝试实现< code>IdentifierGenerator接口,但我能实现的最好结果是为每个插入的新实体执行一个< code>SELECT nextval查询,这在我的例子中是完全不可接受的,因为批处理可能包含数百个实体。深入探究hibernate的细节也没有给我一个答案。

有没有一种方法可以通过回调/钩子同时为多个实体生成多个ID?还是我还得手工做所有的事?

共有1个答案

呼延英奕
2023-03-14

有一些钩子可以实现这一点,请参阅本文作为示例:https://thorben-janssen.com/custom-sequence-based-idgenerator/

若要提高性能,必须配置增量大小,默认情况下为 50。这意味着它将序列递增 50,并将这些值放入池中,从该池中提供这些值以生成标识。

 类似资料:
  • When considering portability between databases, another important decision is selecting the identifier generation stratagy you want to use. Originally Hibernate provided the native generator for this

  • 比如,你用标准regex库来写一个正则表达式,但正则表达式中的反斜杠’\’其实却是一个“转义(escape)”操作符(用于特殊字符),这相当令人讨厌。考虑如何去写“由反斜杠隔开的两个词语”这样一个模式(\w\\w): string s = "\\w\\\\\\w"; // 希望它是对的(译注:不直观、不美观,且容易出错) 请注意,在正则表达式和普通C++字符串中,各自都需要使用连续两个反斜杠来

  • 我正在尝试批量插入到具有标识列的表中。但我的主机文件包含标识列的空值。当我发出“bcp”命令时,我得到一个错误- 正在开始复制。。。 SQLState=S1000,NativeError=0 错误=[Microsoft][SQL服务器本地客户端10.0]在BCP数据文件中遇到意外的EOF SQLState=23000,NativeError=515 错误=[Microsoft][SQL Serve

  • 标识符 Go 的源文件以 .go 为后缀名存储在计算机中,这些文件名均由小写字母、数字、大写字母组成,例如 hello.go 。如果文件名由多个部分组成,则使用下划线 _ 对它们进行分隔,如 pro_03.go 。文件名不包含空格或其他特殊字符。 一个源文件可以包含任意多行的代码,Go 本身没有对源文件的大小进行限制。 Go 语言也是区分大小写的,这与 C 家族中的其它语言相同。有效的标识符必须以

  • 本文向大家介绍详解javascript的变量与标识符,包括了详解javascript的变量与标识符的使用技巧和注意事项,需要的朋友参考一下 一、变量   从字面上看,变量是可变的量;从编程角度讲,变量是用于存储数据的容器 1.1变量特性   javascript中的变量是松散类型的,可以保存任何类型的数据。由于不存在定义某个变量必须要保存何种数据类型值的规则,变量的值及其数据类型可以在脚本的生命周

  • 我正在寻找一个唯一的id,可从iOS访问蓝牙低能耗设备。我有10台设备,我把它放在了10个不同的地方。我需要确切地知道我正在与哪个设备通信,而不管我正在使用哪个iOS设备连接。 在iOS核心蓝牙中,iOS为我的设备分配了一个新的UUID。我无法唯一识别设备。