5

2 つのエンティティ (A と B、1 つの B を多くの As に関連付けることができます) 間の多対 1 のマッピングがあり、A に B の ID (A.B_ID) を持つ機能が必要です。エンティティがデータベースに存在しません。これは可能ですか?

コードの (単純化された) 例:

@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")

明確にするために、エンティティがまだ存在しない場合は、作成したくありません。データベースに B を挿入せずに A を挿入したいだけです。2 つのテーブル間に外部キー制約はありません。

4

1 に答える 1

4

@NotFound側面に注釈を使用して@ManyToOne、エラーが発生しないようにします。ただし、双方向の関係ではまだ試していません。

これは Hibernate 固有の注釈であることに注意してください。

例:

@NotFound(action=NotFoundAction.IGNORE)
于 2013-03-26T16:12:49.230 に答える