gpt4 book ai didi

java - @Where 与 @SecondaryTable 不适用于 Hibernate

转载 作者:行者123 更新时间:2023-11-30 01:55:49 26 4
gpt4 key购买 nike

我的模型中有一对多关系,其中子实体存储在两个表中。

@Entity
@Table(name = "child1")
@SecondaryTable(name = "child2", pkJoinColumns = {
@PrimaryKeyJoinColumn(name = "id1", referencedColumnName = "id1"),
@PrimaryKeyJoinColumn(name = "id2", referencedColumnName = "id2")})
@Where(clause = "col1 is not null and col2 is not null")
@Data
@Immutable
public class Child implements Serializable {...}

Child 实体与 Parent 实体一起急切地获取。问题出在 @Where 子句中,该子句应该引用两个表中的列:col1 位于表 child1col2 中位于 child2 中。这会引发以下错误:

ERROR 12333 --- [nio-8183-exec-7] o.h.engine.jdbc.spi.SqlExceptionHelper   : Column (col2) not found in any table in the query (or SLV is undefined).
java.sql.SQLException: null
...
  1. 仅使用:@Where(clause = "col1 is not null") 提供正确的映射并且不会产生错误。
  2. 使用 @Where(clause = "child1.col1 is not null and child2.col2 is not null") 会出现以下错误:

    Column (child1) not found in any table in the query (or SLV is undefined).

如何使 @Where 使用两个表或有任何解决方法吗?

但是有一些要求:

  1. 我使用 informix 作为底层数据库并具有只​​读访问权限。
  2. 我知道,它可以通过原生 SQL 甚至 JPQL/criteria API 等来解决,但这样做会让我重写很多核心。我想避免它。

最佳答案

这是由于 HHH-4246问题。

解决方法是使用 @MapsId@SecondaryTable 替换为 @OneToOne 关联。 .

这样,child2 表就成为 Child2 实体,您可以对其使用 @Where@Filter.

关于java - @Where 与 @SecondaryTable 不适用于 Hibernate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54552156/

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