2010-01-18 8 views
5

Ho un progetto JPA (EclipseLink) esistente in cui il comportamento desiderato è che se un valore nullo in un campo per un'entità viene assegnato, il valore null non deve essere mantenuto.Esiste un modo per impedire che i valori nulli vengano mantenuti mentre consentono il passaggio ad altri?

Il caso di utilizzo è che potremmo ottenere diversi aggiornamenti parziali a queste entità da fonti esterne. Queste fonti possono darci un valore nullo, che non significa "annullare questo campo" significa "Non ho questo valore".

C'è un'annotazione, modello o altro strumento che può essere utilizzato per automatizzare un controllo Null nel setter O dire a JPA di non persistere valori nulli ????

Posso passare attraverso OGNI settatore in OGNI entità e aggiungere if(val != null) { //set the value } ma che è noioso e ripetitivo.

Per esempio abbiamo:


@Entity 
@Table(name = "my_table") 
public class MyObject { 
@Column 
private String myColumn; 

public String getMyColumn() { 
    return this.myColumn; 
} 

public void setMyColumn(String val) { 
    this.myColumn = val; 
} 
} 

Vorrei avere qualcosa che avrebbe automaticamente aiutare in questo modo:


@Entity 
@Table(name = "my_table") 
public class MyObject { 
@Column 
@DontPersistIfNull 
private String myColumn; 

public String getMyColumn() { 
    return this.myColumn; 
} 

public void setMyColumn(String val) { 
    this.myColumn = val; 
} 
} 

O questo:


@Entity 
@Table(name = "my_table") 
public class MyObject { 
@Column 
private String myColumn; 

public String getMyColumn() { 
    return this.myColumn; 
} 

public void setMyColumn(String val) { 
    //AUTOGENERATED NULL CHECK 
    if(val != null) { 
    this.myColumn = val; 
    } 
} 
} 
+0

Domanda introspettiva, mi piacerebbe vedere un asnwer per questo. ;) Ecco qualcosa che sembra suggerire che ciò sarà possibile: http://projectlombok.org/features/index.html – x4u

+0

Lombok è vicino, ma avrei bisogno di modificarlo un po 'per generare lo schema che sono dopo. – Freiheit

risposta

2

Hibernate validator (e qualsiasi implementazione di javax.validation) ha l'annotazione @NotNull, che non consente all'entità di essere mantenuta se la proprietà annotata è nulla. Non sono sicuro che lo hibernate-validator funzionerebbe con EclipseLink, ma ci dovrebbe essere un'implementazione di javax.validation per EclipseLink.

Ma se si desidera bloccare l'impostazione di valori nulli - bene, quindi modificare il livello che imposta i valori, piuttosto che le entità stesse.

+0

Penso che questo sia quello che spero. Puoi chiarire un po '? Se la proprietà è nullo, non mantiene tale proprietà o impedisce di mantenere l'intera entità? In altre parole fa @NotNull replicare: 1. un vincolo di database in cui una colonna non può essere null O 2. non mettere una proprietà Null in un'istruzione UPDATE o INSERT – Freiheit

+0

il vincolo è al livello del fornitore di persistenza e l'entità stessa non è affatto persistente. – Bozho

2

Non sono sicuro se questo è la risposta che stai cercando, ma hai controllato il Null Object Design Pattern

+0

È un concetto simile almeno. Penso che vorrei che EclipseLink usasse quel pattern piuttosto che il mio codice. "Una colonna è una colonna Null. Quando viene chiamato col.persist, richiama NullColumn.persist che fa sì che JPA non aggiunga quella colonna a un'istruzione INSERT o UPDATE.". – Freiheit

Problemi correlati