代码之家  ›  专栏  ›  技术社区  ›  Stefan Falk

为什么没有生成/插入默认值?

  •  0
  • Stefan Falk  · 技术社区  · 6 年前

    我刚换了一张桌子 place claimed 这样地:

    ALTER TABLE place
        ADD COLUMN IF NOT EXISTS claimed boolean NOT NULL DEFAULT false;
    

    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
    

    null 价值?

    我想这应该不重要,但只是为了确保我也补充说 nullable = false

    @Column(nullable = false)
    private Boolean claimed;
    
    1 回复  |  直到 6 年前
        1
  •  3
  •   sovannarith cheav    6 年前

    解决方案是:

    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;