在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]
。当然,把长度改成你需要的长度。好的,这很有效。非常感谢。如果你编辑你的原始答案并粘贴上面的评论,我会接受你的答案。