@ Где @SecondaryTable не работает с Hibernate - PullRequest
0 голосов
/ 06 февраля 2019

В моей модели есть отношение один ко многим, где дочерняя сущность хранится в двух таблицах.

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

1 Ответ

0 голосов
/ 06 февраля 2019

Это связано с проблемой HHH-4246 .

В качестве обходного пути можно было бы заменить @SecondaryTable на @OneToOne на @MapsId ассоциацию .Таким образом, таблица child2 становится сущностью Child2, для которой вы можете использовать @Where или @Filter.Проверьте эту статью для более подробной информации об использовании этих аннотаций.

...