为什么没有默认值generated/inserted?
Why is no default value generated/inserted?
我刚刚更改了 table place
和它的列 claimed
如下:
ALTER TABLE place
ADD COLUMN IF NOT EXISTS claimed boolean NOT NULL DEFAULT false;
在 phpPgAdmin 中我可以看到它有效。此外,所有初始值都正确设置为 false
.
但是,当我创建新记录时:
this.placeRepository.save(place);
我得到:
ERROR: null value in column "claimed" violates not-null constraint
或作为一个整体:
2018-09-21 21:56:47.902 WARN 30087 --- [nio-8443-exec-9] o.h.engine.jdbc.spi.SqlExceptionHelper : SQL Error: 0, SQLState: 23502
2018-09-21 21:56:47.903 ERROR 30087 --- [nio-8443-exec-9] o.h.engine.jdbc.spi.SqlExceptionHelper : ERROR: null value in column "claimed" violates not-null constraint
Detail: Failing row contains (17, 2018-09-21 19:56:47.885, 2018-09-21 19:56:47.885, ChIJj15CRtukokcRcvSmyJCKGU4, 49.7759560000000008, 9.57715980000000044, Wertheim Village, Almosenberg, Wertheim, null).
2018-09-21 21:56:47.908 INFO 30087 --- [nio-8443-exec-9] m.a.s.e.CustomRestExceptionHandler : org.springframework.dao.DataIntegrityViolationException
2018-09-21 21:56:47.908 INFO 30087 --- [nio-8443-exec-9] m.a.s.e.CustomRestExceptionHandler : org.hibernate.exception.ConstraintViolationException
我不明白这里有什么问题。那么这里为什么没有生成默认值呢?在我看来,Hibernate 只是试图插入一个 null
值?
我认为这应该无关紧要,但只是为了确保我还在 Java 代码中将 nullable = false
添加到实体 class:
的列
@Column(nullable = false)
private Boolean claimed;
解决方法是:
只需为字段设置一个默认值
@Column(nullable = false)
private Boolean claimed = true;
设置默认值以防未设置值
@PrePersist
public void prePersist() {
if(claimed == null)
claimed = true;
}
使用列定义
@Column(columnDefinition="tinyint(1) default 1")
private Boolean claimed;
我刚刚更改了 table place
和它的列 claimed
如下:
ALTER TABLE place
ADD COLUMN IF NOT EXISTS claimed boolean NOT NULL DEFAULT false;
在 phpPgAdmin 中我可以看到它有效。此外,所有初始值都正确设置为 false
.
但是,当我创建新记录时:
this.placeRepository.save(place);
我得到:
ERROR: null value in column "claimed" violates not-null constraint
或作为一个整体:
2018-09-21 21:56:47.902 WARN 30087 --- [nio-8443-exec-9] o.h.engine.jdbc.spi.SqlExceptionHelper : SQL Error: 0, SQLState: 23502
2018-09-21 21:56:47.903 ERROR 30087 --- [nio-8443-exec-9] o.h.engine.jdbc.spi.SqlExceptionHelper : ERROR: null value in column "claimed" violates not-null constraint
Detail: Failing row contains (17, 2018-09-21 19:56:47.885, 2018-09-21 19:56:47.885, ChIJj15CRtukokcRcvSmyJCKGU4, 49.7759560000000008, 9.57715980000000044, Wertheim Village, Almosenberg, Wertheim, null).
2018-09-21 21:56:47.908 INFO 30087 --- [nio-8443-exec-9] m.a.s.e.CustomRestExceptionHandler : org.springframework.dao.DataIntegrityViolationException
2018-09-21 21:56:47.908 INFO 30087 --- [nio-8443-exec-9] m.a.s.e.CustomRestExceptionHandler : org.hibernate.exception.ConstraintViolationException
我不明白这里有什么问题。那么这里为什么没有生成默认值呢?在我看来,Hibernate 只是试图插入一个 null
值?
我认为这应该无关紧要,但只是为了确保我还在 Java 代码中将 nullable = false
添加到实体 class:
@Column(nullable = false)
private Boolean claimed;
解决方法是:
只需为字段设置一个默认值
@Column(nullable = false) private Boolean claimed = true;
设置默认值以防未设置值
@PrePersist public void prePersist() { if(claimed == null) claimed = true; }
使用列定义
@Column(columnDefinition="tinyint(1) default 1") private Boolean claimed;