【问题标题】:JPA one to one relationship where entity may not exist实体可能不存在的 JPA 一对一关系
【发布时间】:2013-03-26 16:07:57
【问题描述】:

我在两个实体(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 保存一个空值,这是不允许的:

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

为了澄清,如果实体不存在,我不希望它被创建。我只想在数据库中插入 A 而没有 B。两个表之间没有外键约束。

【问题讨论】:

    标签: java hibernate jpa one-to-many


    【解决方案1】:

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

    请不要认为这是 Hibernate 特定的注释!

    例子:

    @NotFound(action=NotFoundAction.IGNORE)
    

    【讨论】:

      猜你喜欢
      • 2021-03-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-21
      • 1970-01-01
      • 2012-09-29
      相关资源
      最近更新 更多