【问题标题】:How to set initial value for @Id @GeneratedValue in Spring JPA for MySQL?如何在 Spring JPA for MySQL 中为 @Id @GeneratedValue 设置初始值?
【发布时间】:2016-11-27 00:11:09
【问题描述】:

我不知道如何为@GenerateValue @Id 设置初始值。

我尝试过使用GenerationType.SEQUENCE,但MySQL 不允许这样做。如何设置用于@GenerateValue 的初始值?

同时使用AUTOTABLE 除了1 之外,我仍然无法获得初始值

谢谢

代码使用AUTO

@Entity
@Data
@SequenceGenerator(name = "port_gen", sequenceName = "port_gen",  initialValue = 4700)
public class AppiumPort {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO, generator = "port_gen")
    private Long port;

    public AppiumPort() {

    }
}

使用 TABLE 的代码

    @Entity
    @Data
    public class AppiumPort {

    @TableGenerator(name = "Address_Gen", table = "ID_GEN", pkColumnName = "GEN_NAME", valueColumnName = "GEN_VAL", pkColumnValue = "Addr_Gen", initialValue = 10000, allocationSize = 100)
    @Id
    @GeneratedValue(strategy = GenerationType.TABLE, generator = "Address_Gen")
    private int port;

    public AppiumPort() {

    }
}

** 更新 **

问题与未设置 hibernate.id.new_generator_mappings=true 相关;

https://docs.jboss.org/hibernate/stable/annotations/reference/en/html/ch01.html

Sring Boot 的 Application.properties:

spring.jpa.properties.hibernate.id.new_generator_mappings=true

【问题讨论】:

  • 如果你自己设置db,你可以在你的mysql数据库中进行,如果它不是用jpa/orm生成的,它只是映射,没有实际创建db。
  • 我尝试在 MySQL 数据库上使用表生成器,它运行良好。但是我没有用过spring。

标签: java mysql spring jpa spring-data-jpa


【解决方案1】:

您可以尝试使用@TableGenerator(JPA 有一个@TableGenerator 注释,您可以在其中设置初始值)。 initialValue 可用于播种值

这里的例子:http://www.java2s.com/Code/Java/JPA/SetInitialValueOfTableGenerator.htm

【讨论】:

  • 检查上面我也试过TABLE但没有成功。即使我设置了初始值,它也从 1 开始。
  • 在这种情况下,这是您的 JPA 提供程序中的错误,因此您应该告诉他们
【解决方案2】:

这对我有用:

@Id
@GenericGenerator(
    name = "customers-sequence-generator",
    strategy = "org.hibernate.id.enhanced.SequenceStyleGenerator",
    parameters = {
            @Parameter(name = "sequence_name", value = "customers_sequence"),
            @Parameter(name = "initial_value", value = "1000"),
            @Parameter(name = "increment_size", value = "1")
    })
@GeneratedValue(generator = "customers-sequence-generator")
@Column(nullable=false, updatable=false)
@JsonProperty("id")
private long id;

【讨论】:

  • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
猜你喜欢
  • 2012-02-23
  • 1970-01-01
  • 2011-01-07
  • 2018-08-02
  • 2010-12-01
  • 1970-01-01
相关资源
最近更新 更多