Java 在jpa中调用序列的下一个值

Java 在jpa中调用序列的下一个值,java,hibernate,jpa,sequence,nextval,Java,Hibernate,Jpa,Sequence,Nextval,我将一个类映射为实体,以将其持久化到数据库中。我有一个id字段作为主键,因此每次对象被持久化时,id的值都会从序列“myClass_pk_seq”中检索,该序列类似于下面的代码 @Entity @Table(name="myObjects") public class MyClass { @Id @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="sequence") @SequenceGenerato

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

@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;


    ...
}
我需要在“code”属性中设置一个类似于id的属性。我需要一个序列,这样我就可以将序列的下一个值分配给code(以保留该值,以防用户想要保留它,但不保留数据)。我的意思是用户将看到该字段,如果他不知道输入什么,他可以按下一个按钮并在屏幕上接收下一个可能的值(他可以接受也可以不接受)。我如何获得JPA中定义的序列的下一个值(并增加其值),而不保留非主键字段的数据

我只想有一个方法,在与“code”字段关联的序列上调用nextval,并返回值。在JPA中,用注释实现它的最佳方法是什么

谢谢

我只想有一个方法,在与“code”字段关联的序列上调用nextval,并返回值。在JPA中,用注释实现它的最佳方法是什么

  • 当用户按下按钮时,使用本机SQL获取下一个序列值。手动创建序列或使用“假实体”让JPA为您创建序列
  • 如果不想使用本机SQL,请插入依赖于序列的实体并获取其id
两种解决方案听起来都有点难看。也许您可以简单地使用像UUID生成器这样的随机生成器


实际上,您没有提到任何关于
代码的唯一性的内容(JPA注释也没有显示它必须是唯一的)。为什么不返回一个随机整数?

。可以使用一个字段(长id类型)创建假实体。将其连接到您在DB中定义的序列。然后为该实体创建一个crudepository实现,并使用您定义的伪实体对象的空实例调用其save()方法。Hibernate将为您运行“从dual中选择您的\u SEQ.NEXTVAL”查询。

为什么需要“保留”它。为什么不让JPA来处理that@Bozho好的,我已经完全改变了我的问题,所以现在它更有意义了。请参见代码编号必须是唯一的,但并不总是唯一的。当按下按钮时,必须给出一个新的唯一值,尽管用户可以更改它并插入另一个值(甚至可以是已经存储在数据库中的值)。这就像给用户一个机会,让他看到下一个可能的值,他可以接受也可以不接受(但不在数据库中保存任何内容)@Javi那么为什么不使用随机生成器呢?也许它可以做到这一点,甚至只是一个静态的long属性,并将其递增1。JPA不支持像序列这样的原始标准数据库构造,这会带来伤害。谢谢你把这件事弄清楚!