【问题标题】:'default' is not working in @Column in Spring Boot“默认”在 Spring Boot 的 @Column 中不起作用
【发布时间】:2021-10-07 12:20:15
【问题描述】:

下面是我的实体类,我在类的 EnumType 变量上添加了default 约束。但是,虽然数据库中的值,但它没有采用该值并给出ContraintViolation。 实体

@Entity
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@Table(name = "employee")
public class Employee{   
  @Id
  private String id;
  
  @Column(name = "name", nullable = false)
  private String name;
  
  @Column(name = "email", nullable = false)
  private String email;
  
  @Column(name = "language", nullable = false, columnDefinition = "VARCHAR(10) default 'ENGLISH'")
  @Enumerated(EnumType.STRING)
  private Language language;
  
}

在这里,如果我从 Language Enum 中删除 nullable,则该语言将保存为 null。为什么不将默认值设为ENGLISH

【问题讨论】:

  • 除非您使用 JPA 动态插入,否则插入查询将包含 language=NULL 并且您的默认值不会被考虑在内。您还可以做的是将默认值放在实体的字段上,例如private Language language = Language.ENGLISH;
  • @NicoVanBelle 我尝试在实体中设置语言字段,它不起作用

标签: spring spring-boot hibernate jpa


【解决方案1】:

由于Language 是 ENUM 类型,您可以使用:

@Column(name = "language", nullable = false, columnDefinition = "enum('ENGLISH' , 'CHINESE') default 'ENGLISH'")

【讨论】:

    【解决方案2】:

    用下面的默认值初始化你的枚举属性怎么样?

    @Column(name = "language", nullable = false, columnDefinition = "VARCHAR(10) default 'ENGLISH'")
      @Enumerated(EnumType.STRING)
      private Language language = Language.ENGLISH;
    

    Refer this answer了解更多详情

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-07-06
      • 2018-09-21
      • 2020-04-01
      • 2018-09-24
      • 2020-10-31
      • 2019-11-25
      • 2015-04-02
      • 1970-01-01
      相关资源
      最近更新 更多