【发布时间】:2020-10-25 03:33:12
【问题描述】:
我正在开发一个使用 JPA 的 Spring 应用程序。具体来说,为了生成我的实体的 ID,我使用了 @GeneratedValue 注释。例如:
@Entity
public class SomeEntity {
@Id
@GeneratedValue
private Long id;
private String someField;
// Getters and Setters...
}
问题是,我正在将数据预加载到数据库中。例如,在someFile.sql 我有常规的INSERT 语句:
INSERT INTO some_entity (id, some_field) VALUES (1, 'foo');
INSERT INTO some_entity (id, some_field) VALUES (2, 'bar');
...
然后,我只是使用mysql命令行客户端插入数据:
mysql someDB < someFile.sql
问题是,当尝试使用 JPA 持久化一个新实体时,将分配的第一个 id 是1。但是,该 ID 已被我预加载到数据库中的实体之一使用。这样,我得到一个重复的键错误:
2020-07-04 16:08:42.365 错误 847 --- [https-jsse-nio-8080-exec-9] ohengine.jdbc.spi.SqlExceptionHelper:密钥“PRIMARY”的重复条目“1”
我考虑过使用带有@SequenceGenerator 的初始值。但是,如果我要预加载的初始值数量增加,这种方法可能会导致不得不更改代码。
关于不同方法的任何想法?
【问题讨论】:
-
从日志中,我看到您正在使用 Hibernate 作为持久性提供程序。你用的是哪个版本?
标签: jpa spring-data-jpa jpa-2.0