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

时间:2015-01-29 05:03:28

标签: java jpa

我有一个属性

private boolean include;

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

9 个答案:

答案 0 :(得分:50)

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

非数据库便携式解决方案

@Column(columnDefinition="tinyint(1) default 1")
private boolean include;

面向Java的解决方案

private boolean include = true;

面向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;
      }
...
}

这是我最喜欢的,不那么具有侵入性。基本上,它委派任务来定义实体中Builder模式的默认值。

答案 1 :(得分:5)

使用JPA 2.1和Oracle 11,这适用于使用大小为1的Oracle类型NUMBER:

爪哇:

@Column(name = "ENABLED", nullable = false)
private boolean enabled = true;

创建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")
);

答案 2 :(得分:5)

对于 PostgreSQL ,您可以在定义中使用布尔值

@Column(name = "isDeleted", columnDefinition = "boolean default true")
private boolean isDeleted = true;

答案 3 :(得分:1)

我发现添加构造函数是将新实体默认为值的一种很好的解决方法:

public EntityName(){
    this.fieldToDefault = default;
}

答案 4 :(得分:0)

您始终可以在方法中使用注释@PreUpdate@PrePersist,在此方法中您将设置在更新之前或保存到数据库之前应执行的操作。

或者只是设置值private boolean include = true;

答案 5 :(得分:0)

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

    @Column(columnDefinition="bit default 0")
    private Boolean active;

可能的值:0或1

答案 6 :(得分:0)

如果您在数据库中定义了默认值,则可以选择列批注,并使用insertable = false作为参数,这样在插入值时,它将选择您在默认值中标记的值数据库。例: 在MySQL中,我的人员表的状态属性为布尔型,默认情况下为true。 在您的Java类中,它看起来像这样:

//....
public class Person implements Serializable {
    //.....
    @Column(insertable = false)
    private Boolean status;
    //...
}

您可以了解有关列注释HERE的更多信息,它的解释很好,对我有很大帮助。

答案 7 :(得分:0)

设置默认列值的简单方法是将其直接设置为实体属性值:

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-nice- 
select/1.1.0/js/jquery.nice-select.min.js"></script>

答案 8 :(得分:-1)

{"Parameter is not valid."}
    Data: {System.Collections.ListDictionaryInternal}
    HResult: -2147024809
    HelpLink: null
    InnerException: null
    Message: "Parameter is not valid."
    ParamName: null
    Source: "System.Drawing"
    StackTrace: "   at System.Drawing.Bitmap..ctor(String filename)\r\n   at johneschultz.Areas.Admin.Controllers.EmployeeController.Edit(EmployeeViewModel EmployeeData) in Z:\\_Profile Storage\\Projects\\johneschultz\\johneschultz\\Areas\\Admin\\Controllers\\EmployeeController.cs:line 552"
    TargetSite: {Void .ctor(System.String)}