2015-01-29 14 views
20

Ich habe ein AttributWie in JPA Standard boolean Wert setzen

private boolean include; 

Ich mag würde seinen Standardwert auf true setzen, so dass in der Datenbank muss es von Standard-Wahr angezeigt werden soll. Ist das in JPA möglich?

+0

Mit dem Zuweisen können Sie die Standardmethode value.create setter ändern und den wahren Wert festlegen. –

+6

'private boolean include = true;' wird auf Java funktionieren. Dennoch müssen Sie sicherstellen, dass Ihre Datenbank direkte Unterstützung für 'boolean' Felder hat oder wenn Sie einen Konverter verwenden müssen. –

+0

Können Sie versuchen mit folgenden? Spalte (name = "Include") private boolean include = true; –

Antwort

35

Soweit ich es bekannt ist keine JPA nativen Lösung Standardwerte zur Verfügung zu stellen. kommt es meine Abhilfe:

Nicht Datenbank tragbare Lösung

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

Java orientierte Lösung

private boolean include = true; 

Java orientierte 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; 
     } 
... 
} 

Das ist mein Favorit und weniger aufdringlich. Im Grunde wird die Aufgabe delegiert, den Standardwert für das Builder-Muster in Ihrer Entität zu definieren.

+0

Auch '@Column (columnDefinition =" BOOLEAN DEFAULT false ")' wird für viele Datenbanken funktionieren einschließlich PostgreSQL. – youhans

+0

Haben Sie eine Idee, was der JPA-Ausschuss den Entwicklern empfiehlt? –

0

Sie können immer die Annotationen @PreUpdate oder @Prepersist für die Methode verwenden, in der Sie festlegen, was vor dem Aktualisieren oder vor dem Speichern in der Datenbank ausgeführt werden soll.

oder einfach Setup der Wert private boolean include = true;

2

Mit JPA 2.1 und Oracle 11 das für mich arbeitet unter Verwendung von Oracle-Typ Anzahl der Größe 1:

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") 
); 
0

Ich habe festgestellt, dass das Hinzufügen im Konstruktor eine gute Umgehungslösung für neue Standardelemente zu einem Wert ist:

public EntityName(){ 
    this.fieldToDefault = default; 
} 
0
private boolean include = true; 
+0

Hi Versuchen Sie, einige Erläuterungen hinzuzufügen, um Ihrem Code-Rater Kontext zu geben, als nur Code einzufügen. Obwohl es für Sie vollkommen Sinn machen könnte, wäre es besser, es zu erklären. –