@Where与@SecondaryTable不适用于Hibernate

时间:2019-02-06 11:08:09

标签: java sql hibernate jpa informix

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

@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在表child1中,而col2child2中。这将引发以下错误:

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. 我正在使用INFORMATIONIX作为基础数据库,并且具有只读访问权限。
  2. 我知道,可以通过本机SQL甚至JPQL /条件API等来解决它,但是这样做会使我重写很多核心。我想避免它。

1 个答案:

答案 0 :(得分:2)

这是由于HHH-4246问题引起的。

一种解决方法是将@SecondaryTable替换为@OneToOne with @MapsId association。这样,child2表将成为Child2实体,您可以为其使用@Where@Filter。查看this article for more details有关使用这些注释的信息。