Создание шаблона таблицы Oracle без столбца идентификатора в Grails

Я создаю приложение Grails 3 с некоторыми таблицами из моей базы данных Oracle 12c, и хотя до сих пор все шло быстро, я наткнулся на одну проблемную таблицу, в которой нет столбца идентификатора. Всего четыре VARCHAR2. Кроме того, на вкладке «Ограничения» Oracle SQL Developer я не вижу ни одного из них, определенного как первичный ключ. Как следует продвигаться в таком сценарии, чтобы успешно создать CRUD для этого класса?

Я пытался сказать Grails использовать идентификатор строки в качестве идентификатора, но это приводит только к ошибке «getLong не реализован для класса oracle.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:

Хотя вы можете использовать псевдостолбец ROWID в предложениях SELECT и WHERE запроса, эти значения псевдостолбца фактически не хранятся в базе данных. Вы не можете вставлять, обновлять или удалять значение псевдостолбца ROWID.

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


person Straightfw    schedule 31.01.2019    source источник
comment
Если у вас нет уникального способа идентифицировать каждую строку (кроме идентификатора строки Oracle), то я не думаю, что вы можете это сделать. Будет ли составной ключ, основанный на всех четырех столбцах, уникальным?   -  person Daniel    schedule 01.02.2019
comment
@Daniel - да, я думаю, что составной ключ, основанный на всех атрибутах, будет уникальным. Но как я могу использовать это в своих интересах? Я новичок в Grails, поэтому я действительно не знаю :(   -  person Straightfw    schedule 01.02.2019
comment
Я бы посмотрел на такие сообщения, как этот: stackoverflow.com/questions/14729629/ Это довольно старо, но я предполагаю, что синтаксис не изменился!   -  person Daniel    schedule 01.02.2019
comment
@Daniel - о, это интересно, спасибо! К сожалению, это приводит только к NullPointerException при попытке динамически создать класс домена с таким ключом :( Я получаю сообщение, читающее Request processing failed; nested exception is org.grails.gsp.GroovyPagesException: Error processing GroovyPageView: [Byte array resource [view:-,-,aliasFrequencyDict:index]:21] Error executing tag <f:table>: null :(   -  person Straightfw    schedule 04.02.2019
comment
как насчет использования ROWIDTOCHAR в представлении?   -  person Ted at ORCL.Pro    schedule 05.02.2019
comment
@TedatORCL.Pro - где бы я мог использовать это в представлении? Извините за наивный вопрос, но я новичок в Grails и все еще немного не понимаю, как он работает :)   -  person Straightfw    schedule 05.02.2019
comment
@Straightfw вы можете создать представление для своей таблицы без идентификатора, используя ROWIDTOCHAR в качестве столбца идентификатора. создать представление table_view как выбрать ROWIDTOCHAR(rowid) как ID, t.* из таблицы как t   -  person Ted at ORCL.Pro    schedule 05.02.2019