加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

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

发布时间:2020-12-14 19:32:42 所属栏目:Java 来源:网络整理
导读:我有两个实体之间的多对一映射(A和B,一个B可以与许多As相关联),我需要能够在A(A.B_ID)上获得B的ID,其中特定的B实体不存在于数据库中.这可能吗? 我们代码的一个(简化)示例: @Entity@Table(name = "A")public class A implements java.io.Serializable { //
我有两个实体之间的多对一映射(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.两个表之间没有外键约束.

解决方法

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

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

例:

@NotFound(action=NotFoundAction.IGNORE)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读