gpt4 book ai didi

hibernate - Envers 使用 JoinTable 在双向 OneToMany 中插入空 ID

转载 作者:行者123 更新时间:2023-12-04 05:05:04 25 4
gpt4 key购买 nike

我在 Postgresql 上使用 Hibernate 和 Envers 3.6.10。我已经映射了一个 OneToMany使用 JoinTable 的双向关系实体 A 和 B 之间的关系如下。

A类:

@Entity
@Audited
public class A {
// Other stuff

@OneToMany()
@Cascade(CascadeType.ALL)
@LazyCollection(LazyCollectionOption.TRUE)
@JoinTable(name = "A_B", joinColumns = { @JoinColumn(name = "A_ID") }, inverseJoinColumns = { @JoinColumn(name = "B_ID") })
private Set<B> setOfBs;

// Getters + Setters + HashCode + Equals
}

B类:
@Entity
@Audited
public class B {
// Other stuff

@ManyToOne(optional=true)
@LazyCollection(LazyCollectionOption.TRUE)
@JoinTable(name = "A_B", joinColumns = { @JoinColumn(name = "B_ID") }, inverseJoinColumns = { @JoinColumn(name = "A_ID") })
private A a;

// Getters + Setters + HashCode + Equals
}

通过 save() 持久化带有一组 B 的 A 实体时没有问题.即使没有明确设置 B 和 A 之间的双向关系。当 Envers 进行插入以将修订保存在 JoinTable 中时,问题就会出现。 aud 表收到此异常:
Hibernate: insert into a_b_AUD (a_id, b_id, REV) values (?, ?, ?)
16:27:38,051 TRACE BasicBinder:70 - binding parameter [1] as [BIGINT] - <null>
16:27:38,051 TRACE BasicBinder:82 - binding parameter [2] as [BIGINT] - 2038
16:27:38,051 TRACE BasicBinder:82 - binding parameter [3] as [INTEGER] - 2039
16:27:38,056 WARN JDBCExceptionReporter:233 - SQL Error: 0, SQLState: 23502
16:27:38,056 ERROR JDBCExceptionReporter:234 - ERROR: null value in column «a_id» violates not null restriction

如果我在 Hibernate 中设置了完整的 Debug模式,我可以看到 Envers“知道”那个 Id 但没有将它传递给插入。我该如何解决这个问题?关系是否正确映射? Envers 需要一些特殊的配置。管理这个?

最好的问候。

最佳答案

这可能是 Envers 中的一个错误,因为它是一种非常不典型的关系映射方式。实际上,从 Hibernate 的角度来看,这是两个单向关系,它们通过事件映射到相同的列。

要拥有双向关系,您需要在@OneToMany 中有“mappedBy”。

关于hibernate - Envers 使用 JoinTable 在双向 OneToMany 中插入空 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15618913/

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