Я создаю приложение 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.
Таким образом, у меня нет идей о том, как развиваться :( Любая помощь?
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