Фон У нас есть поставщик, который обновил свой код с 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 я использовал встроенный идентификатор, чтобы объединить два столбца в уникальный идентификатор.