如何在JPA中设置默认布尔值

And*_*zee 29 java jpa

我有一个属性

private boolean include;
Run Code Online (Sandbox Code Playgroud)

我想将其默认值设置为true,以便在数据库中它必须从默认值显示True.这在JPA有可能吗?

Ant*_*cal 52

据我所知,没有JPA原生解决方案来提供默认值.这是我的解决方法:

非数据库移植解决方案

@Column(columnDefinition="tinyint(1) default 1")
private boolean include;
Run Code Online (Sandbox Code Playgroud)

面向Java的解决方案

private boolean include = true;
Run Code Online (Sandbox Code Playgroud)

面向Java加上Builder模式

     @Column(nullable = false)
     private Boolean include;
     ...
     public static class Builder {
      private Boolean include = true; // Here it comes your default value
      public Builder include (Boolean include ) {
      this.include = include ;
      return this;
     }
     // Use the pattern builder whenever you need to persist a new entity.
     public MyEntity build() {
       MyEntity myEntity = new MyEntity ();
       myEntity .setinclude (include );
       return myEntity;
      }
...
}
Run Code Online (Sandbox Code Playgroud)

这是我最喜欢的,不那么干扰.基本上,它委派任务来定义实体中Builder模式的默认值.

  • 同样,@ Column(columnDefinition =“ BOOLEAN DEFAULT false”)`将适用于包括PostgreSQL在内的许多数据库。 (4认同)
  • 知道 JPA 委员会建议开发人员做什么吗? (2认同)

efi*_*rat 8

对于PostgreSQL,您可以在定义中使用 boolean

@Column(name = "isDeleted", columnDefinition = "boolean default true")
private boolean isDeleted = true;
Run Code Online (Sandbox Code Playgroud)


Dan*_*ora 6

使用JPA 2.1和Oracle 11,可以通过使用大小为1的Oracle类型NUMBER对我有效:

Java:

@Column(name = "ENABLED", nullable = false)
private boolean enabled = true;
Run Code Online (Sandbox Code Playgroud)

创建SQL脚本:

CREATE TABLE "ACCOUNT"(
"ID" NUMBER(10,0) NOT NULL ENABLE,
"NAME" VARCHAR2(255 CHAR) NOT NULL ENABLE,
"PASSWORD" VARCHAR2(255) NOT NULL ENABLE,
"ENABLED" NUMBER(1,0) DEFAULT 1 NOT NULL ENABLE,
PRIMARY KEY ("ID")
);
Run Code Online (Sandbox Code Playgroud)


Tar*_*kyi 6

也许对于使用Microsoft SQL SERVER的人有用

    @Column(columnDefinition="bit default 0")
    private Boolean active;
Run Code Online (Sandbox Code Playgroud)

可能的值:0 或 1