2015-01-29 18 views
20

Ho un attributoCome impostare il valore booleano predefinito in APP

private boolean include; 

vorrei impostare il suo valore di default a true, in modo che nel database deve visualizzare vero dal default. È possibile in JPA?

+0

è possibile utilizzare l'assegnazione di cambiare il metodo di value.create setter predefinito e impostare il valore true. –

+6

'booleano privato include = true;' funzionerà su Java. Tuttavia, devi assicurarti che il tuo database abbia un supporto diretto per i campi 'boolean' o se devi usare un convertitore. –

+0

Puoi provare a seguire? Colonna (nome = "Includi") booleano privato include = true; –

risposta

35

Per quanto ho conosciuto non esiste una soluzione nativa APP a fornire valori di default. Qui viene la mia soluzione: soluzione orientata

non database di soluzione portatile

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

Java

private boolean include = true; 

Java orientata più 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; 
     } 
... 
} 

Questo è il mio preferito e meno invadente. Fondamentalmente, delega l'attività a definire il valore predefinito per il pattern Builder nell'entità.

+0

Anche '@Column (columnDefinition =" BOOLEAN DEFAULT false ")' funzionerà per molti database includono PostgreSQL. – youhans

+0

Qualche idea di cosa fa il comitato JPA per gli sviluppatori? –

0

È sempre possibile utilizzare annotazioni @PreUpdate o @Prepersist sul metodo in cui verrà impostato ciò che deve essere eseguito prima dell'aggiornamento o prima del salvataggio in DB.

O semplicemente impostare il valore di private boolean include = true;

2

Utilizzando JPA 2.1 e Oracle 11 questo funziona per me utilizzando Oracle Tipo Numero di dimensioni 1:

Java:

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

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

ho trovato che l'aggiunta nel costruttore è una buona soluzione per le nuove entità predefinite ad un valore:

0
private boolean include = true; 
+0

Ciao Prova ad aggiungere alcune spiegazioni per dare un contesto al codice piuttosto che incollare semplicemente il codice. Anche se potrebbe avere perfettamente senso per te, sarebbe meglio spiegarlo. –

Problemi correlati