我的模型中存在一对多关系,其中子实体存储在两个表中。
@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
中,而col2
在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
...
@Where(clause = "col1 is not null")
可以进行正确的映射,并且不会出错。使用@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
与两个表一起使用,或者有任何解决方法?
尽管有一些要求:
答案 0 :(得分:2)
这是由于HHH-4246问题引起的。
一种解决方法是将@SecondaryTable
替换为@OneToOne
with @MapsId
association。这样,child2
表将成为Child2
实体,您可以为其使用@Where
或@Filter
。查看this article for more details有关使用这些注释的信息。