Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JPA GeneratedValue已生成且已存在Id_Jpa_Spring Data Jpa_Jpa 2.0 - Fatal编程技术网

JPA GeneratedValue已生成且已存在Id

JPA GeneratedValue已生成且已存在Id,jpa,spring-data-jpa,jpa-2.0,Jpa,Spring Data Jpa,Jpa 2.0,我正在开发一个使用JPA的Spring应用程序。具体来说,为了生成实体的ID,我使用@GeneratedValue注释。例如: @实体 公共类实体{ @身份证 @生成值 私人长id; 私有字符串字段; //接球手和接球手。。。 } 问题是,我正在将数据预加载到数据库中。例如,在someFile.sql中,我有常规的INSERT语句: INSERT INTO some_entity (id, some_field) VALUES (1, 'foo'); INSERT INTO some_enti

我正在开发一个使用JPA的Spring应用程序。具体来说,为了生成实体的ID,我使用
@GeneratedValue
注释。例如:

@实体
公共类实体{
@身份证
@生成值
私人长id;
私有字符串字段;
//接球手和接球手。。。
}
问题是,我正在将数据预加载到数据库中。例如,在
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
mysql someDB
问题是,当尝试使用JPA持久化新实体时,将分配的第一个id是
1
。但是,该id已经被我预加载到数据库中的一个实体使用。这样,我会得到一个重复的密钥错误:

2020-07-04 16:08:42.365错误847---[https-jsse-nio-8080-exec-9]o.h.engine.jdbc.spi.SqlExceptionHelper:键“PRIMARY”的重复条目“1”

我考虑过使用带有
@SequenceGenerator
的初始值。但是,如果要预加载的初始值的数量增加,这种方法可能会导致必须更改代码


有其他方法的想法吗?

嗯,最简单的解决方案是让脚本本身为下一个生成的id建立正确的值


如果您在日志中使用Hibernate,我看到您正在使用Hibernate作为持久性提供程序。您使用的是哪个版本?我最终将生成策略切换为
标识
,这似乎有效(id现在是
自动增量
)。我不知道MySQL的
AUTO
策略会自动导出到
TABLE
,也不知道上次插入的
ID()
。非常感谢。
ALTER TABLE some_entity AUTO_INCREMENT = <last_inserted_id>
UPDATE hibernate_sequence SET next_val= <max_inserted_id_for_any_table_plus_one>