Исключение имени столбца версии Hibernate - PullRequest
0 голосов
/ 29 января 2020

Фон У нас есть поставщик, который обновил свой код с Grails 2.5 -> 3.3.2 и Hibernate 4.3 -> 5.

У нас также есть собственный код, который просматривает различные пользовательские таблицы который работал в версии приложения Grails 2.5 / Hibernate 4.3. После обновления я получаю следующую ошибку:

java.sql.SQLSyntaxErrorException: ORA-00904: "THIS_"."VERSION": invalid identifier.

H SQL показывает, что он пытается выбрать 'this_.version as version4_0_0_', а также использовать столбец в предложении where. Столбец версии в настоящее время не существует в таблице.

Ниже представлена ​​исходная сущность:

import groovy.transform.EqualsAndHashCode
import groovy.transform.ToString

import javax.persistence.*

@Entity
@Table(name = "myTable", schema = "mySchema")
@ToString(includeNames = true, includeFields = true)
@EqualsAndHashCode(includeFields = true)
class FinancialResponsibilityAgreement implements Serializable {
    /**
     * Compound key
     */
    @EmbeddedId
    FinancialResponsibilityAgreementId id

    /**
     * Agreement response
     */
    @Column(name = "myTable_AGREEMENT_RESPONSE")
    String response

    /**
     * Data origin
     */
    @Column(name = "myTable_DATA_ORIGIN")
    String dataOrigin

    /**
     * Activity date
     */
    @Column(name = "myTable_ACTIVITY_DATE")
    Date lastModified
}

@Embeddable
@ToString(includeNames = true, ignoreNulls = true)
@EqualsAndHashCode(includeFields = true)
class FinancialResponsibilityAgreementId implements Serializable {
    /**
     * Term code
     */
    @Column(name = "myTable_TERM_CODE")
    String term

    /**
     * Student pidm
     */
    @Column(name = "myTable_PIDM")
    Integer pidm

    public FinancialResponsibilityAgreementId() {}

    public FinancialResponsibilityAgreementId(String term, Integer pidm) {
        this.term = term
        this.pidm = pidm
    }
}

ОБНОВЛЕНИЕ : я вижу импорт пакетов для grails.gorm.transactions это заставляет меня верить, что это было еще одно изменение, которое они сделали Однако я не вижу импорта пакетов gorm ни для одного из классов сущностей.

GOAL Я бы хотел избежать создания новых столбцов, используя существующий столбец activity_date для управления версиями. и создание составного поля идентификатора.

Что я пробовал Я все еще изучаю Grails / Hibernate, но из того, что я прочитал и исследовал, я считаю, что это связано с optimisti c блокировка.

  • Добавление следующего к сущности (в соответствии с документами Hibernate) по-прежнему выдает ту же ошибку.
@Version 
@Column(name = ACTIVITY_DATE") 
Date version
  • добавление отображения Grails для определения имени столбца версии и составного идентификатора, но они ничего не изменили.
  • просто добавление столбца в Таблица под названием «версия» разрешила исключение с this_.version, но теперь она показывает исключение для this_.id. Скорее всего, это связано с тем, что в таблице нет столбца идентификаторов (что совсем другое). В моей исходной сущности Hibernate я использовал встроенный идентификатор, чтобы объединить два столбца в уникальный идентификатор.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...