Spring JPA 插入实体,id 等于空(应自动生成)



Spring的JpaRepository在我尝试save没有id的实体时抛出异常:

MyConfig config = new MyConfig();
config.setValue("value");
myConfigRepository.save(config);

如何使休眠不包含id字段到插入查询中?

org.h2.jdbc.JdbcSQLException: NULL not allowed for column "MY_CONFIG_ID"; SQL statement:
insert into my_config (value, id) values (?, ?) [23502-190]
    at org.h2.message.DbException.getJdbcSQLException(DbException.java:345)
    at org.h2.message.DbException.get(DbException.java:179)
    at org.h2.message.DbException.get(DbException.java:155)
    at org.h2.table.Column.validateConvertUpdateSequence(Column.java:305)
    at org.h2.table.Table.validateConvertUpdateSequence(Table.java:749)
    at org.h2.command.dml.Insert.insertRows(Insert.java:151)
    at org.h2.command.dml.Insert.update(Insert.java:114)
    at org.h2.command.CommandContainer.update(CommandContainer.java:78)
    at org.h2.command.Command.executeUpdate(Command.java:253)
    at org.h2.server.TcpServerThread.process(TcpServerThread.java:345)
    at org.h2.server.TcpServerThread.run(TcpServerThread.java:159)
    at java.lang.Thread.run(Thread.java:745)

我的实体:

@Entity
public class MyConfig {
    @Id
    @SequenceGenerator(sequenceName = "MY_CONFIG_SEQ", name = "MyConfSeq", allocationSize = 1)
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "MyConfSeq")
    private Long id;
    @Column
    private String value;
    //getters & setters

和存储库:

public interface MyConfigRepository extends JpaRepository<MyConfig, Long>, JpaSpecificationExecutor {}

MY_CONFIG_ID不是Hibernate映射的一部分。

插入插入的查询将插入到字段 idvalue 中。然后,必须有第三列名为MY_CONFIG_ID,这列在entity中没有提到,因此将作为null插入。如果此列随后具有not null约束,它将失败。

如果您希望将id -column 命名为 MY_CONFIG_ID,则需要通过用 @Column(name="MY_CONFIG_ID") 注释来生成默认列名(id,与变量相同),如果要使用默认名称id则需要删除列(或至少非空约束)。

最新更新