@JoinColumn выдает ошибку «столбец с идентификатором логического имени не найден» в Hibernate 4 - PullRequest
0 голосов
/ 24 апреля 2019

У меня ниже столбца в моем классе сущности.

@OneToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "INQUIRYID", referencedColumnName="ID", updatable=false, insertable=false)
private MyTable myInquiry; 

Во время выполнения выдает ошибку ниже.

column with logical name ID not found in entity class

Поскольку указанный столбец является первичным ключом , я удалил атрибут referencedColumnName и обновил до значения ниже

 @OneToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "INQUIRYID", updatable=false, insertable=false)
    private MyTable myInquiry;

Это прекрасно работает с Hibernate 5.3 , но как только я перехожу на hibernate 4 , я вижу некоторые аномалии.

В hibernate 5 эта проблема возникает только со столбцами, которые ссылаются на некоторый идентификатор (PK) другого класса. Тем не менее, в hibernate 4 я вижу эту ошибку и для столбцов не-pk.

Я начинаю получать ту же ошибку для столбцов, которые ссылаются не на первичные ключи.

@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "AB", referencedColumnName = "AB")
private MyTable someData;

Приведенный выше код выдает ошибку в hibernate 4

Column with logical name AB not found in entity class. 

Здесь AB - столбец без первичного ключа . Так что я не могу удалить атрибут referencedColumnName.

Это просто из-за спящего варианта или есть другая причина для такого поведения?

Ссылался на это: Аналогичный выпуск

1 Ответ

2 голосов
/ 24 апреля 2019

Есть ошибка для спящего режима 4.1.7

Обходной путь для этой проблемы - окружить имя столбца выделенными акцентами.

Невозможно найти столбец с логическим именем: идентификатор в org.hibernate.mapping.Table (template) и связанные с ним супертаблицы и второстепенные столы

@ ManyToOne @JoinColumnsOrFormulas ({@JoinColumnOrFormula (column = @JoinColumn (name = "template", referencedColumnName = "id")),
@JoinColumnOrFormula (формула = @JoinFormula (значение = "'custom'", referencedColumnName = "type"))}) Это вызвано определением имена столбцов в пределах логической-физической карты TableColumnNameBinding. На этой карте имена столбцов в окружении серьезных акцентов (`id`), в то время как проверка делает поиск карта с простым именем столбца (id).

Обходной путь для этой проблемы - окружить имя столбца с помощью акценты.

@ ManyToOne @JoinColumnsOrFormulas ({@JoinColumnOrFormula (column = @JoinColumn (name = "template", referencedColumnName = "` id` ")),
@JoinColumnOrFormula (формула = @JoinFormula (значение = "'custom'", referencedColumnName = "` type` "))})

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...