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

JPA,Hibernate。如何从@TableGenerator中获取下一个值

盛城
2023-03-14

我有一个实体类具有以下主键生成策略

@Id
@Column(name = "id", nullable = false)
@TableGenerator(name = "USERGENERATOR", table = "my_sequences", pkColumnName = "sequence_name", pkColumnValue = "user_id", valueColumnName = "next_value")
@GeneratedValue(strategy = GenerationType.TABLE, generator = "USERGENERATOR")
protected Integer id;

我想知道是否有一种方法可以使用EntityManager向表生成器询问下一个值。

共有1个答案

公羊晟
2023-03-14

我认为您不能通过任何公共API访问@tablegenerator,但使用本机SQL获取下一个值很容易。只需使用这两个查询:

-- get the current value
select next_value from my_sequences where sequence_name = 'user_id';
-- update value
update my_sequences set next_value = next_value + 1;

如果@tablegenerator同时获取下一个值,则存在冲突的风险。

 类似资料:
  • 问题内容: 我需要hibernate的一个特定功能,即StatelessSession,为此,我需要hibernate的SessionFactory。问题是我只有entityManagerFactory。在这种情况下如何获得StatelessSession? 问题答案: 我通过注入来解决它,定义了像这样的bean http://docs.spring.io/spring/docs/3.0.x/sp

  • 问题内容: 我有一个实体,该实体具有必须从序列中设置的NON-ID字段。目前,我获取序列的第一个值,将其存储在客户端,然后根据该值进行计算。 但是,我正在寻找一种“更好”的方法。我实现了一种获取下一个序列值的方法: 但是,这种方式会大大降低性能(〜5000个对象的创建速度降低了3倍-从5740ms到13648ms)。 我试图添加一个“假”实体: 但是,该方法也不起作用(返回的所有ID为0)。 有人

  • 问题内容: 我有gwt应用程序在后端连接到postgres DB,并且有一个Java类’Judgement’映射了数据库中的’judgements’表,当我尝试将判断持久化到db时,它引发了以下错误: 我的审判课看起来像这样 我的表判断是: 我在数据库中有一个SEQUENCE名称’judgements_id_seq’ 谁能告诉我怎么了???谢谢。 问题答案: Hibernate的PostgreSQ

  • 问题内容: 我正在用c#。创建一个Winform应用程序,并使用sql数据库。 我有一个表,其中有列,如和。是自动递增,所有其他数据类型是。 我正在使用此代码来获取下一个自动增量值: 我在textBox上显示。 但是,当删除表中的最后一行时,我仍然得到该值,该值最近在文本框中删除了 我应该如何获得下一个自动增量值? 问题答案: 要从SQLServer获取下一个自动增量值: 这将获取当前的自动增量值

  • 问题内容: 假设我有ID为3、4、7、9的记录,并且我希望能够通过下一个/上一个链接导航到另一个。问题是,我不知道如何获取具有最近的较高ID的记录。 因此,当我有一个ID为4的记录时,我需要能够获取下一个现有记录,即7。查询可能看起来像 如何获取下一个/上一个记录而不获取整个结果集并手动进行迭代? 我正在使用MySQL 5。 问题答案: 下一个: 以前:

  • 问题内容: 说我有 ID的* 记录 * 我希望能够通过下一个/上一个链接导航到另一个。 问题是,我不知道 如何获取具有最近的较高ID的记录 。 因此,当我有一个 ID为ID 的记录时,我需要能够提取下一个现有记录,即为。 该查询可能看起来像 如何获取下一个/上一个记录而不获取整个结果集并手动迭代? 我正在使用MySQL 5。 问题答案: 下一个: 以前的: