Cómo establecer el valor booleano predeterminado en JPA

4 minutos de lectura

tengo un atributo

private boolean include;

Me gustaría establecer su valor predeterminado en verdadero, de modo que en la base de datos debe mostrar Verdadero por defecto. ¿Es esto posible en JPA?

  • puede usar la asignación para cambiar el valor predeterminado. Crear método de establecimiento y establecer el valor verdadero.

    – Tú ganas

    29 de enero de 2015 a las 5:05

  • private boolean include = true; funcionará en Java. Aún así, debe asegurarse de que su base de datos tenga soporte directo para boolean campos o si tiene que usar un convertidor.

    –Luiggi Mendoza

    29 de enero de 2015 a las 5:07


  • ¿Puedes intentar con lo siguiente? Columna (nombre = “Incluir”) privado booleano incluir = verdadero;

    – Saqib Rezwan

    29 de enero de 2015 a las 5:08

  • Hola, mi base de datos es un servidor sql y usa bit de tipo de datos, por lo que debería admitir valores booleanos. Probé los métodos anteriores en los comentarios, pero aún no se muestra ningún valor en la base de datos de forma predeterminada.

    – André Coetzee

    29 de enero de 2015 a las 5:20

  • Creo que siempre es mejor usar Boolean que boolean cuando se trata de boolean valores en JPA. En algunas versiones de Spring Boot, los lanzamientos posteriores y la excepción al actualizar una entidad

    – Ojonugwa Jude Ochalifu

    20 de enero a las 5:42

Que yo sepa, no existe una solución nativa de JPA para proporcionar valores predeterminados. Aquí viene mi solución:

Solución portátil sin base de datos

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

Solución orientada a Java

private boolean include = true;

Orientado a Java más patrón 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;
      }
...
}

Este es mi favorito y menos intrusivo. Básicamente, delega la tarea de definir el valor predeterminado para el patrón Builder en su entidad.

  • también @Column(columnDefinition="BOOLEAN DEFAULT false") funcionará para muchas bases de datos, incluido PostgreSQL.

    – youhans

    15 de noviembre de 2017 a las 4:45


  • ¿Alguna idea de lo que el comité JPA recomienda que hagan los desarrolladores?

    – Sridhar Sarnobat

    7 de marzo de 2018 a las 23:27

Usando JPA 2.1 y Oracle 11, esto me funciona usando el tipo NÚMERO de Oracle de tamaño 1:

Java:

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

Crear secuencia de comandos 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")
);

Para postgresql puedes usar booleano en la definición

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

  • si estamos usando el valor predeterminado en la definición de la columna, ¿por qué se está inicializando en verdadero nuevamente?

    – Vignesh_A

    22 de junio de 2020 a las 9:31

  • Es para hibernar. considera directamente ese valor asignado y lo inserta en la tabla

    – Omkar Patil

    24 de junio de 2020 a las 3:53

Avatar de usuario de Taras Halynskyi
Taras Halynskyi

Tal vez sea útil para las personas que trabajan con SERVIDOR Microsoft SQL

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

Valores posibles: 0 o 1

En mi caso, para spring boot jpa, funcionó la siguiente sintaxis en la clase de entidad.

@Builder.Default
private boolean columnName = false;

or

@NotNull
@Builder.Default
@ColumnDefault("true")
private Boolean columnName = true;

@Builder.Default es para garantizar que tengamos valores predeterminados mientras construimos el objeto para este modelo, necesarios solo cuando la clase del modelo de entidad está anotada con @Builder. De lo contrario, incluso sin tener @Builder.Default, las cosas funcionan bien como se esperaba.

  • Solo @NotNull @ColumnDefault("true") es suficiente. @Builder.Default lanza una excepción.

    – Ojonugwa Jude Ochalifu

    20 de enero a las 5:40


  • Mi mal debería haber explicado un poco más, @Builder.Default se puede usar si tenemos @Builder anotación para la entidad. @Builder es compatible con el complemento Lombok para generar beans

    – Sasi Kumar M.

    28 de enero a las 6:55

Avatar de usuario de Alan Faz
alan faz

Descubrí que agregar el constructor es una buena solución para las nuevas entidades predeterminadas a un valor:

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

  • Solo @NotNull @ColumnDefault("true") es suficiente. @Builder.Default lanza una excepción.

    – Ojonugwa Jude Ochalifu

    20 de enero a las 5:40


  • Mi mal debería haber explicado un poco más, @Builder.Default se puede usar si tenemos @Builder anotación para la entidad. @Builder es compatible con el complemento Lombok para generar beans

    – Sasi Kumar M.

    28 de enero a las 6:55

avatar de usuario de buræquete
buraquete

Siempre puedes usar anotaciones @PreUpdate o @PrePersist en el método donde configurará lo que se debe hacer antes de actualizar o antes de guardar en la base de datos.

O simplemente configure el valor private boolean include = true;

¿Ha sido útil esta solución?