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?
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
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
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
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;
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 paraboolean
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
queboolean
cuando se trata deboolean
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