【发布时间】:2015-01-21 07:36:20
【问题描述】:
我正在开发一个代码生成器,它必须从数据库元模型文件中生成 JPA 实体。这些模型来自自制的建模系统,用于生成 JPA 实体以外的模型。
在这些模型中,一些字段映射回相同的数据库列。但似乎 JPA 不太喜欢那样。当我尝试运行生成的代码时,我得到了
Exception [EclipseLink-48] (Eclipse Persistence Services - 2.6.0.v20140809-296a69f): org.eclipse.persistence.exceptions.DescriptorException
Exception Description: Multiple writable mappings exist for the field [FACT_INVENT_TRANS_HIST_DM.TRANSACTION_ID]. Only one may be defined as writable, all others must be specified read-only.
Mapping: org.eclipse.persistence.mappings.DirectToFieldMapping[TransactionIdKey-->FACT_INVENT_TRANS_HIST_DM.TRANSACTION_ID]
Descriptor: RelationalDescriptor(InventTransHistFactDM --> [DatabaseTable(FACT_INVENT_TRANS_HIST_DM)])
由于我无法更改模型,剩下的唯一选择是将这些字段之一设为只读。生成的 JPA 实体仅用于从数据库读取数据,不会用于写入数据。有没有办法将某些字段标记为只读或告诉 EclipseLink 这些实体是只读的,因此它不必担心多个可写映射。
我尝试在所有实体中使用 EclipseLink 的 @ReadOnly 注释,但对这个问题没有帮助。
【问题讨论】:
-
和同事讨论后发现其实是元模型出错了。
标签: java jpa eclipselink