为什么没有默认值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;

解决方法是:

  1. 只需为字段设置一个默认值

    @Column(nullable = false) private Boolean claimed = true;


  1. 设置默认值以防未设置值

    @PrePersist public void prePersist() { if(claimed == null) claimed = true; }


  1. 使用列定义

    @Column(columnDefinition="tinyint(1) default 1") private Boolean claimed;