2013-03-26 4 views
5

Ho una mappatura molti a uno tra due entità (A e B, una B può essere associata a molti As) dove ho bisogno della possibilità di avere un ID per B su A (A.B_ID) dove quella particolare entità B non esiste nel database. È possibile?JPA relazione uno a uno in cui l'entità potrebbe non esistere

A (semplificato) esempio del nostro codice:

@Entity 
@Table(name = "A") 
public class A implements java.io.Serializable { 

    // ... 

private B b; 

    // ... 

    @ManyToOne(fetch = FetchType.LAZY) 
    @JoinColumn(name = "B_ID") 
    public B getB() { 
     return this.b; 
    } 

    // ... 
} 


@Entity 
@Table(name = "B") 
public class B implements java.io.Serializable { 

    // ... 

private Set<A> as = new HashSet<A>(0); 

    // ... 

    @OneToMany(fetch = FetchType.LAZY, mappedBy = "b") 
    public Set<A> getAs() { 
     return this.as; 
    } 

    // ... 
} 

Questa configurazione di base finisce con Hibernate cercando di salvare un valore nullo per A.B_ID e che non è consentito:

Caused by: java.sql.BatchUpdateException: ORA-01400: cannot insert NULL into ("MY_SCHEMA"."A"."B_ID") 

Per chiarimento, se l'entità non esiste già, non voglio che venga creata. Vorrei solo che A fosse inserito senza B nel db. Non esiste alcun vincolo di chiave esterna tra le due tabelle.

risposta

3

Io uso un'annotazione @NotFound sul lato @ManyToOne per assicurarsi che non causerà alcun errore. Non ho ancora provato con una relazione bidirezionale.

Si prega di notare che questa è un'annotazione specifica di Hibernate!

Esempio:

@NotFound(action=NotFoundAction.IGNORE) 
Problemi correlati