В моей модели есть отношение один ко многим, где дочерняя сущность хранится в двух таблицах.
@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
работать с двумя таблицами или есть ли обходной путь?
Однако существуют некоторые требования:
- Я использую informix в качестве базовой базы данных и имею доступ только для чтения.
- Я знаю, что это можно решить с помощью собственного SQL или даже API-интерфейса JPQL / критериев и т. Д., Но при этомзаставил бы меня переписать много ядра.Я хочу избежать этого.