So legen Sie den booleschen Standardwert in JPA fest

Lesezeit: 4 Minuten

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?

  • 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ür boolean 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 als boolean beim Umgang mit boolean 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

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

Benutzeravatar von Taras Halynskyi
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

Benutzeravatar von Alan Faz
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

Benutzeravatar von buræquete
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;

1441220cookie-checkSo legen Sie den booleschen Standardwert in JPA fest

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy