Я создаю приложение Grails 3 с несколькими таблицами из своей базы данных Oracle 12c, и пока все шло быстро, я наткнулся на одну проблемную таблицу, в которой нет столбца ID.Это просто четыре VARCHAR2
.Кроме того, на вкладке Ограничения Oracle SQL Developer я не вижу ни одного из них, определенных как Первичный ключ.Как продвинуться в таком сценарии, чтобы успешно создать CRUD для этого класса?
Я пытался сказать Grails использовать идентификатор строки в качестве идентификатора, но это только приводит к тому, что getLong не реализован для оракула класса.jdbc.driver.T4CRowidAccessor "ошибка при попытке получить доступ к (будущей) странице лесов.Мой код выглядит следующим образом:
class AliasFrequencyDict {
String frequency
String unit
String description
String lang
static constraints = {
frequency maxSize: 10, sqlType: 'VARCHAR2'
unit maxSize: 1, sqlType: 'VARCHAR2'
description maxSize: 30, sqlType: 'VARCHAR2'
lang maxSize: 2, sqlType: 'VARCHAR2'
}
static mapping = {
sort 'frequency'
version false
id column: 'ROWID'
}
}
Как мне решить эту проблему, если у меня нет столбца с явным идентификатором, и мне не разрешено его создавать?
РЕДАКТИРОВАТЬ: Таким образом, единственный способ, которым я смог продвинуться до сих пор, - это использовать составной ключ, состоящий из всех столбцов, а затем вручную изменить представление индекса, чтобы вместо этого:
<f:table collection="${aliasFrequencyDict}" />
теперь у нас есть это:
<f:table collection="${aliasFrequencyDictList}" properties="['frequency','unit','description','lang']"/>
Это, однако, не позволяет мне получить доступ к какой-либо из существующих записей или добавить новые, как я полагаю, мне придетсявручную укажите эти свойства и там.Кажется, что не так просто явно указать их в представлении редактирования, например, как это происходит в индексе (или, кроме того, заставить редактирование действительно работать).
EDIT2: Кроме того, из того, что я понял, использование ROWID в любом случае не очень хорошая идея. Oracle docs состояние:
Несмотря на то, что вы можете использовать псевдостолбец ROWID в выражении SELECT и WHERE запроса, эти значения псевдостолбца фактически не хранятся в базе данных.Вы не можете вставить, обновить или удалить значение псевдостолбца ROWID.
Таким образом, у меня нет идей о том, как продвигаться :( Любая помощь?