2013-03-26 89 views
5

我有兩個實體之間的多對一映射(A和B,一個B可以與許多關聯)在我需要的能力有一個ID對於A(A.B_ID)上的B,該特定的B實體不存在於數據庫中。這可能嗎?JPA一對一的關係,實體可能不存在

A的我們的代碼(簡體)例如:

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

    // ... 
} 

這些基本設置與Hibernate試圖保存A.B_ID空值結束了,並且是不允許的:

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

對於澄清,如果實體尚不存在,我不希望它被創建。我只想要A在數據庫中沒有B插入。兩個表之間沒有外鍵約束。

回答

3

我在@ManyToOne側使用@NotFound註釋來確保它不會導致任何錯誤。儘管如此,我還沒有嘗試過使用雙向關係。

請注意,這不是Hibernate特有的註釋!

實施例:

@NotFound(action=NotFoundAction.IGNORE)