一般来说,我遇到映射问题:org.hibernate.MappingException: Repeated column in mapping for entity: os.comida.StoreDocumentRw column: Type (should be mapped with 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 (should be mapped with insert="false" update="false")
当我将type 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
所以我不知道应该把这个可插入/可更新的东西放在哪里使它工作。我正在使用Grails 2.0.0和Oracle 10g。谁能告诉我我的代码有什么问题?
StoreDocument
中的我的映射是错误的。剪切String type
和type column:'"Type"'
并编辑像discriminator column:[name:'"Type"',length: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"'
}
}
答案 0 :(得分:2)
在StoreDocument
中,您有String type
和discriminator column: '"Type"'
,因此从您的例外看起来Grails正在尝试创建两列名称类型。尝试更改String
或标识符列的名称,看看是否可以解决问题。
要解决生成varchar(-1)字段的问题,请尝试以下来自此JIRA GRAILS-5168的discriminator column:[name:'Type',length:10]
。当然,将长度更改为您需要的任何长度。