2013-03-26 27 views
5

İki kimliğe (A ve B, bir B birçok As ile ilişkili olabilir) arasında bire bir eşleme var. B'deki A (A.B_ID) için, söz konusu B varlığının veritabanında mevcut olmadığı. Mümkün mü?JPA Varlık olmayabilecek birebir ilişki

A kodumuzun (basitleştirilmiş) örnek:

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

    // ... 
} 

Bu temel kurulum hazırda A.B_ID için boş değer kurtarmaya çalışırken ile biter ve bu izin verilmez:

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

için açıklık, eğer varlık zaten mevcut değilse, onun yaratılmasını istemiyorum. Ben sadece db'de A ile B'nin eklenmesini istiyorum. İki tablo arasında yabancı anahtar kısıtlaması yoktur.

cevap

3

@ManyToOne tarafındaki bir @NotFound ek açıklamasını kullanarak hataya neden olmayacağından emin olun. Yine de çift yönlü bir ilişkiyle denemedim.

Lütfen bu hazırda belirli bir açıklama değil!

Örnek:

@NotFound(action=NotFoundAction.IGNORE)