当前位置: 首页 > 面试题库 >

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

任伟
2023-03-14
问题内容

我有一个映射为实体的类,可将其持久保存在数据库中。我有一个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中执行此操作的最佳方法是什么?

谢谢。


问题答案:

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

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

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

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



 类似资料:
  • 我正在使用Spring靴2 /飞行路线/后退设置。 我想让Flyway创建一个表,其中包含自动键迭代的序列。JPA应该识别序列并使用它。 我让Flyway执行PostgreSQL脚本: 这是实体定义: 启动时抛出以下错误: 我的解释是Flyway成功执行了脚本并创建了一个序列。但是JPA想在之后创建序列并失败,因为它已经存在。如果我错了,请纠正我。 现在,如果可能的话,我如何配置JPA以重用现有序

  • 问题内容: Python是否提供了获取浮点值的功能,该函数是通过将现有浮点值的最低有效位递增而得到的? 我正在寻找类似于C ++ 11中添加的功能的东西。 问题答案: 这里有五个(实际上是四个半)解决方案。 解决方案1:使用Python 3.9或更高版本 2020年10月发布的Python 3.9包括一个新的标准库函数,该函数直接提供此功能:用于将下一个浮点数向正无穷大。例如: 如果查看方法提供的

  • 问题内容: 假设我有一个称为TEST_SEQ的序列,选择下一个值的正确方法是什么?这不起作用: 可能是因为它期望使用“ FROM”子句。在hibernate状态下看着HSQLDialect.getSequenceNextValString()我看到了: 在我的情况下会导致类似: 不适用于2.0.0-rc8(我仅假定此功能在2.0之前的版本中有效- 尚未验证)我遇到了一个解决方案,其中涉及创建一个简

  • 我使用Spring boot2与Spring data jpa、hibernate和posgres一起使用。我需要一年中每1天重置一个序列,因为我们使用当前”序列id。 有没有办法用jpa重置序列?

  • 问题内容: 关于JPA,我有以下问题: 我可以将元素的顺序保存在java.util.List中吗?在我的应用程序中,将元素放入列表的顺序很重要,但是从数据库中获取这些集合后,顺序却不一样(符合预期)。您能告诉我解决这个问题的方法吗? PS:我放入集合中的实体中没有字段可用来订购它们。 罗森 问题答案: 在JPA 1中,有一些骇人听闻的方法可以做到这一点,但是切换到JPA 2提供程序是最容易的。您正

  • 我是java函数编程的新手,不知道如何编写代码来避免(例如)此操作中的NPE: 我在这里的目的是在列表中查找最新对象的时间戳。关于如何更好地收集最后一个元素的建议非常受欢迎,但我在这里的主要问题实际上是为什么这有效。 文档显示,如果归约的结果为空,该函数将抛出< code > NullPointerException : http://docs . Oracle . com/javase/8/do