java - 如何在数据库表已填充 JPA 时正确设置 @Id 字段

标签 java jakarta-ee jpa derby

我的数据库中只有一个表,我在该字段上添加了 @Id 属性。作为策略,我使用GenerationType.IDENTITY。当数据库表尚未由 SQL 脚本中的行填充时,这可以正常工作。

当表中已经有一些行时,我如何设法让它工作?因为当我尝试从预填充的应用程序中插入实体时它不起作用。

我为此使用 Derby 数据库并使用 eclipselink 作为实现。

最佳答案

使用从序列表中获取其 ID 的序列生成器。像这样:

@Id
@GeneratedValue(generator = "yourTableIdGenerator")
@GenericGenerator(name = "yourTableIdGenerator", strategy = "org.hibernate.id.enhanced.SequenceStyleGenerator", parameters = {
                    @Parameter(name = "sequence_name", value = "your_table_id_seq"),
                    @Parameter(name = "optimizer", value = "hilo"),
                    @Parameter(name = "initial_value", value = "1000"),
                    @Parameter(name = "increment_size", value = "10") }
                )
@Column(name = "your_table_id", length = 15)
public Long getId() {
    return id;
}

将 initial_value 设置为大于从脚本填充的行的最大 id 的值。

来自 java 6 ee api:http://download.oracle.com/javaee/6/api/javax/persistence/TableGenerator.html

@TableGenerator(
   name="empGen",
   table="ID_GEN",
   pkColumnName="GEN_KEY",
   valueColumnName="GEN_VALUE",
   pkColumnValue="EMP_ID",
   initialValue = 1000,
   allocationSize=1)
@Id
@GeneratedValue(strategy=TABLE, generator="empGen")
int id;

关于java - 如何在数据库表已填充 JPA 时正确设置 @Id 字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8122194/

相关文章:

java - 无限检查自定义 JSR303 注释

java - HttpUtil、记录器.debug

java - 如何使用注释在 Hibernate 中映射映射列表?

java - 为什么 Google 的 Gson 不是静态的?

java - Eclipse 直到运行时才报告错误

java - 使用 Jpype 将 numpy 数组传递给 Java

swing - JPA 桌面应用程序

java - 如何在项目中显示 *plugins* 的 Maven 依赖关系树?

java - 如何在 Java EE 应用程序中使用多线程环境

sql - JPA/hibernate : on delete set null