Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Grails2.0.0中使用鉴别器时出现映射异常_Grails_Gorm - Fatal编程技术网

在Grails2.0.0中使用鉴别器时出现映射异常

在Grails2.0.0中使用鉴别器时出现映射异常,grails,gorm,Grails,Gorm,一般来说,我在映射方面有问题:org.hibernate.MappingException:entity:os.comida.StoreDocumentRw column:Type映射中的重复列(应使用insert=“false”update=“false”进行映射) 介绍一下这个问题:我有许多文档类型,其中每种文档类型都与其他文档类型略有不同。它们都有共同的属性:日期、编号、发行人等。所以我决定将所有文档类型存储在一个物理表中(一个-这对我来说非常重要)。为了实现这一点,我想使用hiberna

一般来说,我在映射方面有问题:
org.hibernate.MappingException:entity:os.comida.StoreDocumentRw column:Type映射中的重复列(应使用insert=“false”update=“false”进行映射)

介绍一下这个问题:我有许多文档类型,其中每种文档类型都与其他文档类型略有不同。它们都有共同的属性:日期、编号、发行人等。所以我决定将所有文档类型存储在一个物理表中(一个-这对我来说非常重要)。为了实现这一点,我想使用hibernate鉴别器

下面我将粘贴我的源代码。我有一个基类
StoreDocument
和两个文档类型
StoreDocumentRw
StoreDocumentWz

class StoreDocument {

    String type
    Date documentDate
    
    static mapping = {
        table '"StoreDocument"'
        version false
        id column:'"StoreDocumentID"', generator:'sequence', params:[sequence:'STORE_DOCUMENT_SEQ']
        discriminator column: '"Type"'
        documentDate column:'"DocumentDate"'
        type column:'"Type"'
    }    
    
}

class StoreDocumentRw extends StoreDocument {

    String rwSpecificData
    
    static mapping = {
        discriminator value: 'rw'
        rwSpecificData column:'"RwSpecificData"'        
    }
}

class StoreDocumentWz extends StoreDocument {

    String wzSpecificData
    
    static mapping = {
        discriminator value: 'wz'
        wzSpecificData column:'"WzSpecificData"'
    }
}
当我尝试运行前面提到的应用程序时,
org.hibernate.MappingException:Repeated column in mapping for entity:os.comida.StoreDocumentRw column:Type(应使用insert=“false”update=“false”进行映射)

当我将
类型insertable:false、updateable:false
添加到
StoreDocumentRw
映射时,它仍然是一样的

当我将
type insertable:false、updateable:false
添加到
StoreDocument
映射时,情况更糟:

ERROR hbm2ddl.SchemaExport  - Unsuccessful: create table COMIDA2."StoreDocument" ("StoreDocumentID" number(19,0) not null, "DocumentDate" timestamp not null, "Type" varchar2(255 char), "Type" varchar2(-1 char) not null, "WzSpecificData" varchar2(255 char), "RwSpecificData" varchar2(255 char), primary key ("StoreDocumentID"))
ERROR hbm2ddl.SchemaExport  - ORA-00957: duplicate column name
所以我不知道应该把这个可插入/可更新的东西放在哪里才能让它工作。我正在使用Grails2.0.0和Oracle 10g。有人能告诉我我的代码出了什么问题吗


解决方案: 我在
StoreDocument
中的映射错误。剪切
字符串类型
类型列:“'type'”
并编辑鉴别器映射,就像这样
鉴别器列:[名称:“'type'”,长度:50]
,结果是:

class StoreDocument {

    Date documentDate
    
    static mapping = {
        table '"StoreDocument"'
        version false
        id column:'"StoreDocumentID"', generator:'sequence', params:[sequence:'STORE_DOCUMENT_SEQ']
        discriminator column:[name:'"Type"',length:50]
        documentDate column:'"DocumentDate"'
    }        
}

StoreDocument
中,您有
String-type
discriminator列:““type”
,因此从您的异常情况来看,Grails似乎正在尝试创建两个name-type列。尝试更改
字符串
或鉴别器列的名称,看看这是否解决了问题


要解决生成varchar(-1)字段的问题,请尝试以下操作:
discriminator column:[name:'Type',length:10]
。当然,可以根据需要更改长度。

Hm。。我希望
字符串类型
用作鉴别器列。当我注释
字符串类型
类型列:“'type”
”时,Grails尝试创建
“type”varchar2(-1 char)not null
,这会导致错误
ORA-00910:指定的长度对于其数据类型来说太长
。顺便说一句,我在数据源中使用了
dbCreate='createdrop'
。那么这是否表明我必须自己创建一个db结构来避免这个
varchar2(-1 char)
?请尝试这个:
discriminator列:[name:'Type',length:10]
。当然,把长度改成你需要的长度。好的,这很有效。非常感谢。如果你编辑你的原始答案并粘贴上面的评论,我会接受你的答案。