2013-03-26 4 views
5

Ich habe eine Viele-zu-Eins-Zuordnung zwischen zwei Entitäten (A und B, ein B kann mit vielen As verbunden sein), wo ich die Fähigkeit haben muss, eine ID zu haben für B auf A (A.B_ID), wo diese bestimmte B-Entität nicht in der Datenbank existiert. Ist das möglich?JPA Eins-zu-Eins-Beziehung, in der Entität nicht existieren kann

A (vereinfachte) Beispiel unseres Code:

@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; 
    } 

    // ... 
} 

Das grundlegende Setup endet mit Hibernate versucht, einen Nullwert für A.B_ID zu speichern und das ist nicht erlaubt:

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

Für Klarstellung, wenn die Entität noch nicht existiert, möchte ich nicht, dass sie erstellt wird. Ich möchte nur, dass A ohne B in die db eingefügt wird. Zwischen den beiden Tabellen gibt es keine Fremdschlüsseleinschränkung.

Antwort

3

Ich verwende eine @NotFound Annotation auf der @ManyToOne Seite, um sicherzustellen, dass es keine Fehler verursacht. Ich habe es aber noch nicht mit einer bidirektionalen Beziehung versucht.

Bitte nicht, dass dies eine Hibernate spezifische Annotation ist!

Beispiel:

@NotFound(action=NotFoundAction.IGNORE) 
Verwandte Themen