JPA一对一关系,其中实体可能不存在

时间:2013-03-26 16:07:58

标签: java hibernate jpa one-to-many

我在两个实体之间有多对一的映射(A和B,一个B可以与许多As关联),我需要能够在A(A.B_ID)上获得B的ID数据库中不存在该特定B实体。这可能吗?

我们代码的一个(简化)示例:

@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。两个表之间没有外键约束。

1 个答案:

答案 0 :(得分:3)

我在@NotFound侧使用@ManyToOne注释,以确保它不会导致任何错误。我还没有尝试双向关系。

请注意,这不是Hibernate特定的注释!

示例:

@NotFound(action=NotFoundAction.IGNORE)