一尘不染

在JPA中调用序列的下一个值

hibernate

我有一个映射为实体的类,可将其持久保存在数据库中。我有一个id字段作为主键,因此每次持久存储对象时,都会从序列“
myClass_pk_seq”中检索id的值,该代码类似于以下代码。

@Entity
@Table(name="myObjects")
public class MyClass {
    @Id
    @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="sequence")
    @SequenceGenerator(name="sequence", sequenceName="myClass_pk_seq", allocationSize=1)
    @Column(name="myClassId")
    private Integer id;

    private Integer code;


    ...
}

我需要在“代码”属性中添加类似于id的内容。我需要一个序列,以便我可以分配代码以编码序列的下一个值(以保留该值,以防用户想要保留它而又不保留数据)。我的意思是用户将看到该字段,如果他不知道要输入什么,则可以按一个按钮并在屏幕上接收下一个可能的值(他可以接受也可以不接受)。如何在JPA中定义的序列的下一个值(并增加其值)而又不保留非主键字段的数据?

我只想有一个方法,该方法在与“代码”字段关联的序列上调用nextval并返回值。在带有批注的JPA中执行此操作的最佳方法是什么?

谢谢。


阅读 596

收藏
2020-06-20

共1个答案

一尘不染

我只想有一个方法,该方法在与“代码”字段关联的序列上调用nextval并返回值。在带有批注的JPA中执行此操作的最佳方法是什么?

  • 用户按下按钮时,使用本机SQL获取下一个序列值。可以手动创建序列,也可以使用“伪实体”让JPA为您创建序列。
  • 如果您不想使用本机SQL,请插入依赖于序列的实体并获取其ID。

两种解决方案听起来都很难看。也许您可以简单地使用随机生成器(例如UUID生成器)。

实际上,您没有提到code()的唯一性(并且JPA注释未显示它必须是唯一的)。为什么不返回随机整数?

2020-06-20