Ich habe ein Attribut
private boolean include;
Ich möchte seinen Standardwert auf „true“ setzen, sodass er in der Datenbank standardmäßig „true“ anzeigen muss. Ist dies in JPA möglich?
Ich habe ein Attribut
private boolean include;
Ich möchte seinen Standardwert auf „true“ setzen, sodass er in der Datenbank standardmäßig „true“ anzeigen muss. Ist dies in JPA möglich?
Soweit ich weiß, gibt es keine native JPA-Lösung, um Standardwerte bereitzustellen. Hier kommt mein Workaround:
Tragbare Lösung ohne Datenbank
@Column(columnDefinition="tinyint(1) default 1")
private boolean include;
Java-orientierte Lösung
private boolean include = true;
Java-orientiertes plus Builder-Muster
@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;
}
...
}
Dies ist mein Favorit und weniger aufdringlich. Grundsätzlich delegiert es die Aufgabe, den Standardwert an das Builder-Muster in Ihrer Entität zu definieren.
Ebenfalls @Column(columnDefinition="BOOLEAN DEFAULT false")
funktioniert für viele Datenbanken, einschließlich PostgreSQL.
– youhans
15. November 2017 um 4:45 Uhr
Irgendeine Idee, was das JPA-Komitee Entwicklern empfiehlt?
– Sridhar Sarnobat
7. März 2018 um 23:27 Uhr
Mit JPA 2.1 und Oracle 11 funktioniert dies für mich, indem ich den Oracle-Typ NUMBER der Größe 1 verwende:
Java:
@Column(name = "ENABLED", nullable = false)
private boolean enabled = true;
SQL-Skript erstellen:
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")
);
Für PostgreSQL Sie können boolean in der Definition verwenden
@Column(name = "isDeleted", columnDefinition = "boolean default true")
private boolean isDeleted = true;
Wenn wir den Standardwert in der Spaltendefinition verwenden, warum initialisieren Sie dann wieder auf true?
– Vignesh_A
22. Juni 2020 um 9:31 Uhr
Es ist für den Winterschlaf. Es berücksichtigt direkt diesen zugewiesenen Wert und fügt ihn in die Tabelle ein
– Omkar Patil
24. Juni 2020 um 3:53 Uhr
Taras Halynskyi
Vielleicht wird es nützlich sein für Leute, die damit arbeiten Microsoft SQL-SERVER
@Column(columnDefinition="bit default 0")
private Boolean active;
Mögliche Werte: 0 oder 1
In meinem Fall funktionierte für Spring Boot JPA die folgende Syntax in der Entity-Klasse.
@Builder.Default
private boolean columnName = false;
or
@NotNull
@Builder.Default
@ColumnDefault("true")
private Boolean columnName = true;
@Builder.Default soll sicherstellen, dass wir beim Erstellen des Objekts für dieses Modell Standardwerte haben, die nur benötigt werden, wenn die Klasse des Entitätsmodells mit @Builder kommentiert ist. Andernfalls funktionieren die Dinge auch ohne @Builder.Default wie erwartet.
Nur @NotNull @ColumnDefault("true")
reicht. @Builder.Default
wirft eine Ausnahme.
– Ojonugwa Jude Ochalifu
20. Januar 2022 um 5:40 Uhr
Mein schlechtes hätte ein bisschen weiter erklären sollen, @Builder.Default
kann verwendet werden, wenn wir haben @Builder
Anmerkung für die Entität. @Builder
wird vom Lombok-Plugin unterstützt, um Beans zu generieren
– Sasi Kumar M
28. Januar 2022 um 6:55 Uhr
Alan Faz
Ich habe festgestellt, dass das Hinzufügen im Konstruktor eine gute Problemumgehung ist, um neue Entitäten standardmäßig auf einen Wert festzulegen:
public EntityName(){
this.fieldToDefault = default;
}
Nur @NotNull @ColumnDefault("true")
reicht. @Builder.Default
wirft eine Ausnahme.
– Ojonugwa Jude Ochalifu
20. Januar 2022 um 5:40 Uhr
Mein schlechtes hätte ein bisschen weiter erklären sollen, @Builder.Default
kann verwendet werden, wenn wir haben @Builder
Anmerkung für die Entität. @Builder
wird vom Lombok-Plugin unterstützt, um Beans zu generieren
– Sasi Kumar M
28. Januar 2022 um 6:55 Uhr
buræquete
Sie können immer Anmerkungen verwenden @PreUpdate
oder @PrePersist
on-Methode, bei der Sie festlegen, was vor dem Update oder vor dem Speichern in die DB getan werden soll.
Oder richten Sie einfach den Wert ein private boolean include = true;
Sie können die Zuweisung verwenden, um den Standardwert zu ändern. Erstellen Sie die Setter-Methode und setzen Sie den wahren Wert.
– Ihr gewinnt
29. Januar 2015 um 5:05 Uhr
private boolean include = true;
wird auf Java funktionieren. Dennoch müssen Sie sicherstellen, dass Ihre Datenbank direkte Unterstützung fürboolean
Felder oder wenn Sie einen Konverter verwenden müssen.– Luiggi Mendoza
29. Januar 2015 um 5:07 Uhr
Kannst du es mit folgendem versuchen? Column(name=”Include”) private boolean include = true;
– Saqib Rezwan
29. Januar 2015 um 5:08 Uhr
Hallo, meine Datenbank ist ein SQL-Server, der das Datentyp-Bit verwendet, also sollte er boolesche Werte unterstützen. Ich habe die oben genannten Methoden in den Kommentaren ausprobiert, aber standardmäßig wird immer noch kein Wert in der Datenbank angezeigt
– André Coetzee
29. Januar 2015 um 5:20 Uhr
Ich finde es immer besser zu benutzen
Boolean
alsboolean
beim Umgang mitboolean
Werte in JPA. In einigen Versionen von Spring Boot löst das spätere Auslösen und eine Ausnahme aus, wenn eine Entität aktualisiert wird– Ojonugwa Jude Ochalifu
20. Januar 2022 um 5:42 Uhr