问题描述
我们正在定制一个外部JEE项目(不修改基本源代码,仅配置和继承)。我遇到以下异常:
Exception [EclipseLink-48] (Eclipse Persistence Services - 2.6.2.v20151217-774c696): org.eclipse.persistence.exceptions.DescriptorExce
ption
Exception Description: Multiple writable mappings exist for the field [MY_TABLE.ERROR_CODE]. Only one may be defined
as writable,all others must be specified read-only.
Mapping: org.eclipse.persistence.mappings.DirectToFieldMapping[errorCodeString-->MY_TABLE.ERROR_CODE]
Descriptor: RelationalDescriptor(my.package.somwhere.DerivedClass --> [DatabaseTable(MY_TABLE)])
Runtime Exceptions:
---------------------------------------------------------
at org.eclipse.persistence.internal.jpa.EntityManagerSetupImpl.deploy(EntityManagerSetupImpl.java:593)
at org.eclipse.persistence.internal.jpa.EntityManagerFactoryDelegate.getAbstractSession(EntityManagerFactoryDelegate.java:205)
at org.eclipse.persistence.internal.jpa.EntityManagerFactoryDelegate.createEntityManagerImpl(EntityManagerFactoryDelegate.java:305)
at org.eclipse.persistence.internal.jpa.EntityManagerFactoryImpl.createEntityManagerImpl(EntityManagerFactoryImpl.java:337)
at org.eclipse.persistence.internal.jpa.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:303)
at org.jboss.as.jpa.container.TransactionScopedEntityManager.createEntityManager(TransactionScopedEntityManager.java:187)
at org.jboss.as.jpa.container.TransactionScopedEntityManager.getEntityManager(TransactionScopedEntityManager.java:91)
at org.jboss.as.jpa.container.AbstractEntityManager.clear(AbstractEntityManager.java:331)
at my.code.some.function.somwhere...
问题可能与以下事实有关,即ERROR_CODE
列确实存在多个映射。这是原始映射:
@Entity
@Table("name="MY_TABLE")
public class BaseClass implements Serializable {
...
@Column(name="TRJ_ERROR_CODE")
private Integer errorCode;
}
已覆盖,列类型从NUMBER
更改为VARCHAR2
:
@Entity
@DiscriminatorValue("X")
@AttributeOverrides({
@AttributeOverride(name = "errorCode",column = @Column(name = "TRJ_ERROR_CODE",updatable = false,insertable = false))
})
public class DerivedClass extends BaseClass {
...
@Column(name = "TRJ_ERROR_CODE",length = 200)
private String errorCodeString;
}
<!--ORM.XML-->
<entity class="my.package.somwhere.DerivedClass">
<attributes>
<transient name="errorCode"/>
</attributes>
</entity>
仅在enitityManager.clear()
呼叫中发生此问题。持久实体可以正常工作。调试eclipselink SessionCustomizer仅显示一个映射-第二个映射来自何处?我如何禁用原来的一个?我找不到具有org.eclipse.persistence.mappings.DirectToFieldMapping
而非OneToMany
,OneToOne
等关系的此问题的任何示例。
使用以下代码片段插入实体管理器:
@PersistenceContext(unitName = SomeConstants.PERSISTANCE_JTA_UNIT_CODE,type = PersistenceContextType.TRANSACTION)
private EntityManager entityManager;
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)