use*_*446 2 spring hibernate spring-data-jpa spring-boot hibernate-5.x
我刚刚将我的应用程序从 Spring Boot 1.3.3 迁移到 2.0.0.RELEASE 并做了大部分更改以使我的项目启动并运行。
但是,当我调用任何存储库的 save() 选项时,我遇到了一个问题。相同的结构和 DO 在 1.3.3 中运行良好。
每当我去保存(在任何存储库中)时,我都会收到以下错误:
org.springframework.dao.InvalidDataAccessResourceUsageException: could not execute statement; SQL [n/a]; nested exception is org.hibernate.exception.SQLGrammarException: could not execute statement
Caused by: com.microsoft.sqlserver.jdbc.SQLServerException: Cannot insert explicit value for identity column in table 'POLICY' when IDENTITY_INSERT is set to OFF.
Run Code Online (Sandbox Code Playgroud)
我的 PolicyDO 的 id 设置如下:
private @Id @GeneratedValue(strategy=GenerationType.AUTO,generator="policyId_seq) @SequenceGenerator(name="policyId_seq",sequenceName="POLICYID_SEQ",allocationSize=1) Long id;
Run Code Online (Sandbox Code Playgroud)
这是我的存储库的快照:
public interface PolicyRepository extends CrudRepository<PolicyDO, Long> { PolicyDO findByPolicyNum(String policyNum); PolicyDO findByProposalNum(String proposalNum); }
Run Code Online (Sandbox Code Playgroud)
我一直在谷歌搜索过去 2 个小时,但找不到通过配置或注释设置 IDENTITY_INSERT 的方法。任何人都可以帮助解决这个问题?我什至尝试将所有 ID 设置为 null,因此它必须在插入之前生成所有 ID,但仍然没有
小智 5
当我迁移到 2.0.0 时,我遇到了同样的问题。在调查了这个问题后,我意识到 DB 中的序列不能正常工作,所以我不得不调整设置。
我不知道为什么但是从 @GeneratedValue 注释中删除生成器并将策略类型更改为 IDENTITY 解决了这个问题。
在你的情况下,它看起来像:
private @Id @GeneratedValue(strategy=GenerationType.IDENTITY) @SequenceGenerator(name="policyId_seq",sequenceName="POLICYID_SEQ",allocationSize=1) Long id;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1333 次 |
| 最近记录: |