【问题标题】:How to give Jpa @GeneratedValue(strategy = GenerationType.AUTO) a start value instead of 0如何给 Jpa @GeneratedValue(strategy = GenerationType.AUTO) 一个起始值而不是 0
【发布时间】:2017-01-06 08:25:05
【问题描述】:

我有一个应该自动从数据库中获取 id 的实体。我使用 MySQL,所以我希望注释 @GeneratedValue(strategy=GenerationType.AUTO) 当我运行项目时,我将导入我的应用程序所需的硬编码主数据,但是当我使用 jpa 将新数据添加到同一个表时,它以 id 开头0 因此说 id 已经存在。 我必须让 jpa 从我添加的最后一个 id 开始自动递增。这可能吗

【问题讨论】:

  • 确保导入的数据使用自增或导入后更改值stackoverflow.com/questions/970597/…
  • 我认为jpa不会关心mysql它有自己的方式来创建id??我正在使用@generated 值注释
  • 好吧,如果您发布相关信息会更清楚。使用 MySql,我通常会使用由数据库管理的自动增量列。
  • 有没有办法让 jpa 做到这一点??
  • "让 jpa 做这个" ?这就是为什么您在 @GeneratedValue 注释上有策略。您选择了“AUTO”,这让 JPA 提供者可以做它想做的事情。只需选择“IDENTITY”策略,您应该会获得 MySQL AUTOINCREMENT

标签: mysql jpa


【解决方案1】:

我们可以使用@SequenceGenerator来指定起始序列。

@Entity
@Table(name = "employee_data")
@SequenceGenerator(name="employee_id_seq", initialValue=5, allocationSize=100)
public class EmployeeDO {

    @Id
    @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="employee_id_seq")
    private Long id;

【讨论】:

  • 只要使用的数据库支持序列(MySQL 不支持 AFAIK)。
【解决方案2】:

在此处使用GenerationType.TABLE 方法,以便根据数据库中已经存在的值提供数据。

【讨论】:

  • 还有什么办法吗??如果我更改@generated 值,它将影响整个应用程序
  • 我想没有其他办法了,尝试在你的数据库中查询 OPENJPA_SEQUENCE_TABLE 并将初始值更新为你想要的。
猜你喜欢
  • 1970-01-01
  • 2011-03-05
  • 1970-01-01
  • 2011-07-05
  • 2012-02-15
  • 2013-09-10
  • 1970-01-01
  • 1970-01-01
  • 2016-12-06
相关资源
最近更新 更多