在Grails中搭建没有ID列的Oracle表

时间:2019-01-31 14:08:48

标签: oracle grails gorm grails-3.0 grails3

我正在创建一个Grails 3应用程序,其中带有来自我的Oracle 12c数据库的一些表,尽管到目前为止一切进展很快,但是我遇到了一个没有ID列的问题表。只有四个VARCHAR2。另外,在Oracle SQL Developer的“约束”选项卡中,我没有看到其中任何一个定义为主键。在这种情况下如何为此类成功创建CRUD?

我尝试告诉Grails使用行ID作为ID,但是当我尝试访问(待)搭建好的页面时,这只会导致“未为oracle.jdbc.driver.T4CRowidAccessor类实现getLong”错误。我的代码如下:

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'
    }
}

如果我没有显式的ID列并且不允许创建列,该如何解决?

编辑:因此,到目前为止,我唯一能够前进的方法是使用由所有列组成的复合键,然后手动更改索引视图,以代替此:

<f:table collection="${aliasFrequencyDict}" />

我们现在有了这个:

<f:table collection="${aliasFrequencyDictList}" properties="['frequency','unit','description','lang']"/>

但是,这不允许我访问任何现有条目或添加新条目,因为我想我也必须在那里手动指定这些属性。但是,在编辑视图中显式地声明它们似乎并不像在索引中那样容易(或者最重要的是使编辑真正起作用)。

EDIT2 :另外,从我收集的数据来看,使用ROWID并不是一个好主意。 Oracle docs状态:

  

尽管您可以在SELECT和WHERE中使用ROWID伪列   查询的子句,这些伪列值实际上并未存储   在数据库中。您不能插入,更新或删除   ROWID伪列。

因此,我对如何进步不了解:(有帮助吗?

0 个答案:

没有答案