我们有一个spring boot(v 1.5.2)项目设置,带有一个用于本地开发的h2内存数据库。由于这是一个非常新的项目,我们没有遗留代码(还有..)到handle legacy id-generators。所以我们设置了spring.jpa.hibernate.use-new-id-generator-mappings: true
。
通过提供src/main/resources/data.sql
,我们添加了一些初始数据。该文件除了insert
命令之外什么都不包含,请说实体A
。
我们的实体配置了以下id生成器:
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
但是,当尝试存储另一个条目(即aRepo.save(newA)
)时,这会导致以下错误。
Caused by: org.h2.jdbc.JdbcSQLException: Unique index or primary key violation: "PRIMARY KEY ON PUBLIC.A(ID)"; SQL statement:
insert into a (something, id) values (?, ?)
设置spring.jpa.hibernate.use-new-id-generator-mappings: false
或不插入初始数据都可以解决问题。但是,我们宁愿理解为什么上述配置不起作用以及我们是否可以使其工作?
提前致谢! : - )
答案 0 :(得分:0)
Hibernate只为每个条目维护会话。请检查您关闭服务中上一个会话的天气。不是意味着关闭并刷新你的会话。
您的数据库连接未正确关闭。
@Autowired
SessionFactory sessionFactory;
public <return Type> serviceFunction() {
session.save(newA);
session.flush();
session.close();
}
您需要关闭每个会话,否则模型类无法更改您的Id。它保持不变。 希望它会对你有所帮助。