Spring Boot 2.0.0 迁移 - JPA 存储库保存问题
Spring Boot 2.0.0 Migration - JPA Repository save issue
我刚刚将我的应用程序从 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.
我的 PolicyDO 的 id 是这样设置的:
private @Id @GeneratedValue(strategy=GenerationType.AUTO,generator="policyId_seq) @SequenceGenerator(name="policyId_seq",sequenceName="POLICYID_SEQ",allocationSize=1) Long id;
这是我的存储库的快照:
public interface PolicyRepository extends CrudRepository<PolicyDO, Long> { PolicyDO findByPolicyNum(String policyNum); PolicyDO findByProposalNum(String proposalNum); }
过去 2 小时我一直在谷歌搜索,但找不到通过配置或注释设置 IDENTITY_INSERT 的方法。任何人都可以帮忙吗?我什至尝试将我所有的 ID 设置为 null,因此它必须在插入之前生成所有 ID,但仍然没有任何结果
我迁移到 2.0.0 时遇到了同样的问题。在调查了这个问题后,我意识到数据库中的序列无法正常工作,所以我不得不调整设置。
我不知道为什么,但是从 @GeneratedValue 注释中删除生成器并将策略类型更改为 IDENTITY 解决了问题。
在你的情况下它看起来像:
private @Id @GeneratedValue(strategy=GenerationType.IDENTITY) @SequenceGenerator(name="policyId_seq",sequenceName="POLICYID_SEQ",allocationSize=1) Long id;
我刚刚将我的应用程序从 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.
我的 PolicyDO 的 id 是这样设置的:
private @Id @GeneratedValue(strategy=GenerationType.AUTO,generator="policyId_seq) @SequenceGenerator(name="policyId_seq",sequenceName="POLICYID_SEQ",allocationSize=1) Long id;
这是我的存储库的快照:
public interface PolicyRepository extends CrudRepository<PolicyDO, Long> { PolicyDO findByPolicyNum(String policyNum); PolicyDO findByProposalNum(String proposalNum); }
过去 2 小时我一直在谷歌搜索,但找不到通过配置或注释设置 IDENTITY_INSERT 的方法。任何人都可以帮忙吗?我什至尝试将我所有的 ID 设置为 null,因此它必须在插入之前生成所有 ID,但仍然没有任何结果
我迁移到 2.0.0 时遇到了同样的问题。在调查了这个问题后,我意识到数据库中的序列无法正常工作,所以我不得不调整设置。
我不知道为什么,但是从 @GeneratedValue 注释中删除生成器并将策略类型更改为 IDENTITY 解决了问题。
在你的情况下它看起来像:
private @Id @GeneratedValue(strategy=GenerationType.IDENTITY) @SequenceGenerator(name="policyId_seq",sequenceName="POLICYID_SEQ",allocationSize=1) Long id;