Dom*_*rio 5 java database spring hibernate spring-data
你好 StackOverflow 社区,我的注释有问题@GenerateValue。我希望 JPA 为我的 ID 列生成值。但是我还有一个专栏,人们可以在其中编写某种任务(待办事项列表)。
我的代码看起来像这样:
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int id;
private String name;
Run Code Online (Sandbox Code Playgroud)
我有一个 SQL 数据文件,它在我的 h2 数据库中写入一些数据:
INSERT INTO task VALUES(1, 'go to the gym');
INSERT INTO task VALUES(2, 'eat with tom');
INSERT INTO task VALUES(3, 'meetup');
INSERT INTO task VALUES(4, 'doing some homeworks');
INSERT INTO task VALUES(5, 'doing some exercise');
INSERT INTO task VALUES(6, 'studying with Mat');
Run Code Online (Sandbox Code Playgroud)
我的问题是,当我删除 SQL 数据文件上的整数值时,我的编译器总是说我必须为任务声明一个 id,但我认为会@GenerateValue自动为我生成 id?
您必须使用@GeneratedValue(strategy = GenerationType.IDENTITY)或@GeneratedValue(strategy = GenerationType.SEQUENCE)并确保您在数据库级别具有索引或序列。同样在使用自动生成的 id 时,插入时不要显式指定它们。
正确的:
INSERT INTO task(description) VALUES('go to the gym');
Run Code Online (Sandbox Code Playgroud)
但我认为“@GenerateValue”会自动为我生成 ID?
这不是正确的假设,Hibernate 只使用 db 提供的 ID。要使其工作,您需要为主键列创建索引/序列。