2013-03-26 21 views
5

私はIDを持つ能力が必要な2つのエンティティ(AとB、1つのBは多くのAsに関連付けることができます)間に多対1のマッピングを持っています特定のBエンティティがデータベースに存在しないA on B(A.B_ID)の場合。これは可能ですか?JPAの1対1関係エンティティが存在しない場合

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にnull値を保存しようとしてしまい、それが許可されていません:

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

のためにエンティティがまだ存在しない場合、私はそれが作成されることを望んでいません。私はちょうどDBにBを入れずにAを挿入したいだけです。 2つのテーブル間に外部キー制約はありません。

答えて

3

@ManyToOne側の@NotFound注釈を使用してエラーが発生しないことを確認します。私はまだ双方向の関係でそれを試していない。

これはHibernate固有のアノテーションではありません。

例:

@NotFound(action=NotFoundAction.IGNORE) 
関連する問題