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
映射的一部分。
插入插入的查询将插入到字段 id
和 value
中。然后,必须有第三列名为MY_CONFIG_ID
,这列在entity
中没有提到,因此将作为null
插入。如果此列随后具有not null
约束,它将失败。
如果您希望将id
-column 命名为 MY_CONFIG_ID
,则需要通过用 @Column(name="MY_CONFIG_ID")
注释来生成默认列名(id
,与变量相同),如果要使用默认名称id
则需要删除列(或至少非空约束)。