首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不能将QueryBasedValueHolder转换为UnitOfWorkValueHolder JPA

不能将QueryBasedValueHolder转换为UnitOfWorkValueHolder JPA
EN

Stack Overflow用户
提问于 2013-01-23 16:58:23
回答 1查看 540关注 0票数 0

我被它困住了,我试图持久化一个实体(Cab)和一个孩子(inventory)。

代码语言:javascript
复制
public void updatePriceByType(Cab cab) { 

  try { 
    for(Inventory inventory : cab.getInventories()){
      inventory.setCab(cab); 
      em.persist(em.merge(inventory));
    } 
    em.persist(em.merge(cab)); 
  } 
  finally {
    if (null != em) { 
      em.close(); 
    } 
  } 
}

获取异常,如下所示:

代码语言:javascript
复制
Caused by: javax.persistence.RollbackException: java.lang.ClassCastException: org.eclipse.persistence.internal.indirection.QueryBasedValueHolder cannot be cast to org.eclipse.persistence.internal.indirection.UnitOfWorkValueHolder
at org.eclipse.persistence.internal.jpa.transaction.EntityTransactionImpl.commitInternal(EntityTransactionImpl.java:102)
at org.eclipse.persistence.internal.jpa.transaction.EntityTransactionImpl.commit(EntityTransactionImpl.java:63)
at org.springframework.orm.jpa.JpaTransactionManager.doCommit(JpaTransactionManager.java:512)
... 44 more
Caused by: java.lang.ClassCastException: org.eclipse.persistence.internal.indirection.QueryBasedValueHolder cannot be cast to org.eclipse.persistence.internal.indirection.UnitOfWorkValueHolder
at org.eclipse.persistence.internal.indirection.TransparentIndirectionPolicy.buildBackupClone(TransparentIndirectionPolicy.java:92)
at org.eclipse.persistence.internal.indirection.TransparentIndirectionPolicy.backupCloneAttribute(TransparentIndirectionPolicy.java:78)
at org.eclipse.persistence.mappings.ForeignReferenceMapping.buildBackupClone(ForeignReferenceMapping.java:225)
at org.eclipse.persistence.internal.descriptors.ObjectBuilder.buildBackupClone(ObjectBuilder.java:498)
at org.eclipse.persistence.descriptors.changetracking.DeferredChangeDetectionPolicy.buildBackupClone(DeferredChangeDetectionPolicy.java:219)
at org.eclipse.persistence.descriptors.changetracking.DeferredChangeDetectionPolicy.revertChanges(DeferredChangeDetectionPolicy.java:283)
at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.resumeUnitOfWork(UnitOfWorkImpl.java:5248)
at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.synchronizeAndResume(UnitOfWorkImpl.java:5197)
at org.eclipse.persistence.internal.sessions.RepeatableWriteUnitOfWork.synchronizeAndResume(RepeatableWriteUnitOfWork.java:548)
at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.commitAndResume(UnitOfWorkImpl.java:1154)
at org.eclipse.persistence.internal.jpa.transaction.EntityTransactionImpl.commitInternal(EntityTransactionImpl.java:84)
EN

回答 1

Stack Overflow用户

发布于 2013-01-23 22:35:38

对merge()的结果调用persist()没有任何意义,因为merge()将持久化或更新对象。cab对象最初来自哪里,您需要调用merge?它是在另一个EntityManager/transaction中读取还是序列化?

该错误应该不会发生,因此您可能希望在其上记录一个错误。请确保您先尝试最新版本。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14475732

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档