Создание леса таблицы Oracle без столбца идентификаторов в Grails - PullRequest
0 голосов
/ 31 января 2019

Я создаю приложение 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.

Таким образом, у меня нет идей о том, как продвигаться :( Любая помощь?

...