我正在创建一个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伪列。
因此,我对如何进步不了解:(有帮助吗?