Java Spring数据jpa:批插入不工作

Java Spring数据jpa:批插入不工作,java,hibernate,jpa,jdbc,spring-data-jpa,Java,Hibernate,Jpa,Jdbc,Spring Data Jpa,我用它为我的一个实体用spring数据jpa实现批插入。我使用的是mssqldb 我将主键生成策略从GenerationType.IDENTITY更改为GenerationType.SEQUENCE: @Entity @Table(name = "Answers") public class AnswerDMO implements java.io.Serializable { private static final long serialVersionUID =

我用它为我的一个实体用spring数据jpa实现批插入。我使用的是mssqldb

我将主键生成策略从
GenerationType.IDENTITY
更改为
GenerationType.SEQUENCE

@Entity
@Table(name = "Answers")
public class AnswerDMO implements java.io.Serializable {
    private static final long serialVersionUID = 1L;
    private long id;
    
    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "answer_new_generator")
    @SequenceGenerator(name = "answer_new_generator", sequenceName = "answer_new_sequence", allocationSize = 15)
    @Column(name = "Id", unique = true, nullable = false)
    public long getId() {
        return this.id;
    }
    public void setId(long id) {
        this.id = id;
    }
服务方法通过调用
list save(Iterable entities)保存应答实体列表

休眠查询:

08:02:35,739 INFO  [stdout] (default task-1) Hibernate: 
08:02:35,740 INFO  [stdout] (default task-1)     select
08:02:35,742 INFO  [stdout] (default task-1)         next value for supplemental_answer_new_sequence

08:02:57,941 INFO  [stdout] (default task-1) Hibernate: 
08:02:57,941 INFO  [stdout] (default task-1)          insert 
08:02:57,941 INFO  [stdout] (default task-1)         into
08:02:57,941 INFO  [stdout] (default task-1)             my_schema.dbo.Answers
08:02:57,941 INFO  [stdout] (default task-1)             (CreatedDate, InstanceId, ProfileId, QuestionId, UpdatedDate, Value, Id) 
08:02:57,941 INFO  [stdout] (default task-1)         values
08:02:57,941 INFO  [stdout] (default task-1)             (?, ?, ?, ?, ?, ?, ?)
Q1:有人能告诉我为什么它不起作用吗

Q2:另外,在我从
GenerationType.IDENTITY
切换到
GenerationType.SEQUENCE
之后,我开始在日志中发现以下异常:

[jdbc.spi.SqlExceptionHelper] – SQL Error: 544, SQLState: S0001
[jdbc.spi.SqlExceptionHelper] – Cannot insert explicit value for identity column in table 'Answers' when IDENTITY_INSERT is set to OFF.
是因为
id
列具有
identity
属性吗?如果是,解决的步骤是什么

更新:我刚刚注意到我有一个错误的属性名
5
,应该是
5

所以现在的主要问题是

[jdbc.spi.SqlExceptionHelper] – SQL Error: 544, SQLState: S0001
[jdbc.spi.SqlExceptionHelper] – Cannot insert explicit value for identity column in table 'Answers' when IDENTITY_INSERT is set to OFF.

有什么办法可以解决吗?

我面临着完全相同的问题。问题在于,在JPA创建的表中,ID列被标记为标识列和标识列 结果MSSql服务器阻止了JPA生成的insert语句中这些ID列的exlpicit值。 另一个有趣的事实是,如果您已经通过IntelliJ数据库功能创建了“有问题”的表,并且已经注释了ID 列作为主键并自动递增,然后它也被标记为标识列。因此,解决方案如下:

  • 右键单击“有问题”表->SQL脚本->生成DDL到查询控制台
  • 放下桌子
  • 从生成的查询中删除“identity”关键字
  • 执行修改后的查询
  • 重新启动数据库中的序列:ALTER sequence answer_new_sequence Restart WITH 1
  • 我强烈建议allocationSize值与hibernate.hibernate.jdbc.batch_size值匹配,因为这将导致最小值 从序列中传递的值。此外,allocationSize必须与数据库中序列的步骤相匹配。 希望这能有所帮助。 干杯
  • 08:02:35,739 INFO  [stdout] (default task-1) Hibernate: 
    08:02:35,740 INFO  [stdout] (default task-1)     select
    08:02:35,742 INFO  [stdout] (default task-1)         next value for supplemental_answer_new_sequence
    
    08:02:57,941 INFO  [stdout] (default task-1) Hibernate: 
    08:02:57,941 INFO  [stdout] (default task-1)          insert 
    08:02:57,941 INFO  [stdout] (default task-1)         into
    08:02:57,941 INFO  [stdout] (default task-1)             my_schema.dbo.Answers
    08:02:57,941 INFO  [stdout] (default task-1)             (CreatedDate, InstanceId, ProfileId, QuestionId, UpdatedDate, Value, Id) 
    08:02:57,941 INFO  [stdout] (default task-1)         values
    08:02:57,941 INFO  [stdout] (default task-1)             (?, ?, ?, ?, ?, ?, ?)
    
    [jdbc.spi.SqlExceptionHelper] – SQL Error: 544, SQLState: S0001
    [jdbc.spi.SqlExceptionHelper] – Cannot insert explicit value for identity column in table 'Answers' when IDENTITY_INSERT is set to OFF.
    
    [jdbc.spi.SqlExceptionHelper] – SQL Error: 544, SQLState: S0001
    [jdbc.spi.SqlExceptionHelper] – Cannot insert explicit value for identity column in table 'Answers' when IDENTITY_INSERT is set to OFF.