gpt4 book ai didi

java - 实体可能不存在的 JPA 一对一关系

转载 作者:搜寻专家 更新时间:2023-10-31 20:21:25 24 4
gpt4 key购买 nike

我在两个实体(A 和 B,一个 B 可以与多个 A 相关联)之间有一个多对一映射,我需要能够在 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。两个表之间没有外键约束。

最佳答案

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

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

例子:

@NotFound(action=NotFoundAction.IGNORE)

关于java - 实体可能不存在的 JPA 一对一关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15641856/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com