gpt4 book ai didi

java - 为什么hibernate在一个表中保存两个@OneToMany列表?

转载 作者:行者123 更新时间:2023-11-29 13:46:12 25 4
gpt4 key购买 nike

想象一下使用 Hibernate 和 JPA 的以下简化代码:

@Entity
class C {
@Id @GeneratedValue public long id;
}

@MappedSuperclass
abstract class A {
@Id @GeneratedValue public long id;

@OneToMany(cascade = CascadeType.ALL)
public List<C> list1;
@OneToMany(cascade = CascadeType.ALL)
public List<C> list2;
}

@Entity
class B extends A { }

使用 PostgreSQL 数据库,这会生成一个包含列的 b_c

b_id | list1_id | list2_id

现在,尝试持久化任何 B 会导致以下异常:

org.postgresql.util.PSQLException: FEHLER: NULL-Wert in Spalte „list2_id“ verletzt Not-Null-Constraint
Detail: Fehlgeschlagene Zeile enthält (779, 827, null).

大致翻译成
列“list2_id”中的 NULL 值违反了非空约束。内容:(770, 827, null)

为什么会发生这种情况,我该如何避免?
将列表合并为一个列表不是一种选择。使用 Sets 不会改变任何东西。

最佳答案

发生这种情况是因为单向 @OneToMany协会。您需要先确定您的关联是单向的还是双向的。

如果您的关联是单向的,那么您需要使用 @JoinColumn修复额外的连接表问题。如果您的关联是双向的,那么您将依赖 @ManyToOne侧传播所有实体状态更改,使用 mappedBy@OneToMany 上边。您可以找到关于 @OneToMany 的不同方式的很好的解释。协会here .

关于java - 为什么hibernate在一个表中保存两个@OneToMany列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48115993/

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