我们可以在JPA中将主键分配为ABC0001、ABC0002、ABC0003。。。。等等?

我们可以在JPA中将主键分配为ABC0001、ABC0002、ABC0003。。。。等等?,jpa,eclipselink,derby,Jpa,Eclipselink,Derby,我使用的是ecliplink2.5和Derby 10.10.1.1。我想分配主键,使其按照上面定义的顺序生成 有可能吗 我能想到的一种方法是创建一个复合键,其中包括一个常量ABC和另一个以“0001”(可以在序列生成器中定义)开头的数字 但我更倾向于一种只需要将其定义为一个整体而不是一个组合键的方法。您可以使用触发器来实现这一点。在您的derby上为将在insert之前执行的表编写一个触发器(我不知道它在derby中调用了什么)。在触发器内部,您可以根据需要从序列或另一个表中获取001。您可以使

我使用的是
ecliplink2.5
Derby 10.10.1.1
。我想分配主键,使其按照上面定义的顺序生成

有可能吗

我能想到的一种方法是创建一个复合键,其中包括一个常量ABC和另一个以“0001”(可以在序列生成器中定义)开头的数字


但我更倾向于一种只需要将其定义为一个整体而不是一个组合键的方法。

您可以使用
触发器来实现这一点。在您的
derby
上为将在insert之前执行的表编写一个触发器(我不知道它在derby中调用了什么)。在触发器内部,您可以根据需要从序列或另一个表中获取
001
。您可以使用硬编码或使用另一个表(如果您也计划使用XYZ、PRQ等)自定义
ABC
。这只是一个基本的概念,主要的是你可以很容易地使用触发器来实现它。

没有EclipseLink的经验,但是快速谷歌显示定制生成器并不难实现()。我个人会使用一个“IDENTITY”GeneratedValue和一个insert触发器通过过程在derby上生成值。我认为您的请求与一般的数据库模式设计原则不一致。一般来说,合成主键的全部要点是它对您的程序没有任何意义;它唯一的特性是它唯一地标识您的记录。如果您需要一个对您的程序有意义的值的键,您应该自己生成这些值。正如Uiron所提到的,您需要使用自定义序列类来附加“ABC”字符串。如果不想完全处理序列,则可以在自定义序列对象中使用NativeSequence或TableSequence来处理数字序列。