org.datanucleus.store.types.sco.simple.HashSet无法强制转换为java.util.Date

时间:2018-02-02 11:14:57

标签: java google-app-engine google-cloud-platform google-cloud-datastore datanucleus

从最近几天突然我们的生产已部署的应用程序正在抛出此错误

  

org.datanucleus.store.types.sco.simple.HashSet无法转换为   的 java.util.Date

我们正在使用datanucleus-api-jpa-3.1.3,datanucleus-api-jdo-3.1.3和Java 1.7

当我们检索条目时会发生这种情况。

我已经检查了所有的事情,但没有找到这种情况发生的根本原因。我已查看此链接1)stackoverflow-questionId-22307734(2)datanucleus-javadocs(3)gae-jdo-docs

示例代码:

import java.util.Date;

import javax.jdo.annotations.IdGeneratorStrategy;
import javax.jdo.annotations.PersistenceCapable;
import javax.jdo.annotations.Persistent;
import javax.jdo.annotations.PrimaryKey;


@PersistenceCapable
public class MyClass {

    @PrimaryKey
    @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
    private Long Id;

    @Persistent
    private String domainName;

    @Persistent
    private String customerName;

    @Persistent
    private String companyName;

    @Persistent
    private Date installationDate;

    @Persistent
    private Date renewalDate;
    .....
    getter...
    setter...
}

异常消息完整堆栈跟踪:

  

异常消息:org.datanucleus.store.types.sco.simple.HashSet   无法强制转换为java.util.Date(ErrorHandler.java:10) 2018-02-02   00:15:28.671 IST com.company.projectname.classnames.ErrorHandler   errorHandler:类DataAccessLayer中的错误(ErrorHandler.java:11)   2018-02-02 00:15:28.672 IST   com.company.projectname.classnames.ErrorHandler errorHandler:
  (ErrorHandler.java:14)   的 com.company.projectname.dataaccesslayer.MyClass.jdoReplaceField(MyClass.java)   2018-02-02 00:15:28.672 IST   com.company.projectname.classnames.ErrorHandler errorHandler:
  (ErrorHandler.java:14)   org.datanucleus.state.AbstractStateManager.replaceField(AbstractStateManager.java:2387)   2018-02-02 00:15:28.672 IST   com.company.projectname.classnames.ErrorHandler errorHandler:
  (ErrorHandler.java:14)   org.datanucleus.state.JDOStateManager.replaceField(JDOStateManager.java:1877)   2018-02-02 00:15:28.672 IST   com.company.projectname.classnames.ErrorHandler errorHandler:
  (ErrorHandler.java:14)   org.datanucleus.state.JDOStateManager.replaceField(JDOStateManager.java:1781)   2018-02-02 00:15:28.672 IST   com.company.projectname.classnames.ErrorHandler errorHandler:
  (ErrorHandler.java:14)   org.datanucleus.store.types.sco.SCOUtils.createSCOWrapper(SCOUtils.java:241)   2018-02-02 00:15:28.672 IST   com.company.projectname.classnames.ErrorHandler errorHandler:
  (ErrorHandler.java:14)   org.datanucleus.store.types.sco.SCOUtils.newSCOInstance(SCOUtils.java:139)   2018-02-02 00:15:28.672 IST   com.company.projectname.classnames.ErrorHandler errorHandler:
  (ErrorHandler.java:14)   org.datanucleus.state.JDOStateManager.wrapSCOField(JDOStateManager.java:2230)   2018-02-02 00:15:28.672 IST   com.company.projectname.classnames.ErrorHandler errorHandler:
  (ErrorHandler.java:14)   com.google.appengine.datanucleus.FetchFieldManager.fetchFieldFromEntity(FetchFieldManager.java:468)   2018-02-02 00:15:28.673 IST   com.company.projectname.classnames.ErrorHandler errorHandler:
  (ErrorHandler.java:14)   com.google.appengine.datanucleus.FetchFieldManager.fetchObjectField(FetchFieldManager.java:408)   2018-02-02 00:15:28.673 IST   com.company.projectname.classnames.ErrorHandler errorHandler:
  (ErrorHandler.java:14)   org.datanucleus.state.AbstractStateManager.replacingObjectField(AbstractStateManager.java:2353)   2018-02-02 00:15:28.673 IST   com.company.projectname.classnames.ErrorHandler errorHandler:
  (ErrorHandler.java:14)   的 com.company.projectname.dataaccesslayer.MyClass.jdoReplaceField(MyClass.java)   2018-02-02 00:15:28.673 IST   com.company.projectname.classnames.ErrorHandler errorHandler:
  (ErrorHandler.java:14)   的 com.company.projectname.dataaccesslayer.MyClass.jdoReplaceFields(MyClass.java)   2018-02-02 00:15:28.673 IST   com.company.projectname.classnames.ErrorHandler errorHandler:
  (ErrorHandler.java:14)   org.datanucleus.state.JDOStateManager.replaceFields(JDOStateManager.java:1935)   2018-02-02 00:15:28.673 IST   com.company.projectname.classnames.ErrorHandler errorHandler:
  (ErrorHandler.java:14)   org.datanucleus.state.JDOStateManager.replaceFields(JDOStateManager.java:1962)   2018-02-02 00:15:28.673 IST   com.company.projectname.classnames.ErrorHandler errorHandler:
  (ErrorHandler.java:14)   com.google.appengine.datanucleus.EntityUtils $ 1.fetchFields(EntityUtils.java:974)   2018-02-02 00:15:28.673 IST   com.company.projectname.classnames.ErrorHandler errorHandler:
  (ErrorHandler.java:14)   org.datanucleus.state.JDOStateManager.loadFieldValues(JDOStateManager.java:764)   2018-02-02 00:15:28.673 IST   com.company.projectname.classnames.ErrorHandler errorHandler:
  (ErrorHandler.java:14)   org.datanucleus.state.JDOStateManager.initialiseForHollow(JDOStateManager.java:205)   2018-02-02 00:15:28.673 IST   com.company.projectname.classnames.ErrorHandler errorHandler:
  (ErrorHandler.java:14)   org.datanucleus.state.StateManagerFactory.newForHollowPopulated(StateManagerFactory.java:89)   2018-02-02 00:15:28.674 IST   com.company.projectname.classnames.ErrorHandler errorHandler:
  (ErrorHandler.java:14)   org.datanucleus.state.ObjectProviderFactory.newForHollowPopulated(ObjectProviderFactory.java:75)   2018-02-02 00:15:28.674 IST   com.company.projectname.classnames.ErrorHandler errorHandler:
  (ErrorHandler.java:14)   org.datanucleus.ObjectManagerImpl.findObject(ObjectManagerImpl.java:2882)   2018-02-02 00:15:28.674 IST   com.company.projectname.classnames.ErrorHandler errorHandler:
  (ErrorHandler.java:14)   com.google.appengine.datanucleus.EntityUtils.entityToPojo(EntityUtils.java:1014)   2018-02-02 00:15:28.674 IST   com.company.projectname.classnames.ErrorHandler errorHandler:
  (ErrorHandler.java:14)   com.google.appengine.datanucleus.query.DatastoreQuery $ 2.适用(DatastoreQuery.java:229)   2018-02-02 00:15:28.674 IST   com.company.projectname.classnames.ErrorHandler errorHandler:
  (ErrorHandler.java:14)   com.google.appengine.datanucleus.query.DatastoreQuery $ 2.适用(DatastoreQuery.java:226)   2018-02-02 00:15:28.674 IST   com.company.projectname.classnames.ErrorHandler errorHandler:
  (ErrorHandler.java:14)   com.google.appengine.datanucleus.query.LazyResult.resolveNext(LazyResult.java:96)   2018-02-02 00:15:28.674 IST   com.company.projectname.classnames.ErrorHandler errorHandler:
  (ErrorHandler.java:14)   com.google.appengine.datanucleus.query.LazyResult.resolveAll(LazyResult.java:121)   2018-02-02 00:15:28.674 IST   com.company.projectname.classnames.ErrorHandler errorHandler:
  (ErrorHandler.java:14)   com.google.appengine.datanucleus.query.LazyResult.size(LazyResult.java:115)   2018-02-02 00:15:28.674 IST   com.company.projectname.classnames.ErrorHandler errorHandler:
  (ErrorHandler.java:14)   com.google.appengine.datanucleus.query.StreamingQueryResult.size(StreamingQueryResult.java:151)   2018-02-02 00:15:28.675 IST   com.company.projectname.classnames.ErrorHandler errorHandler:
  (ErrorHandler.java:14)   org.datanucleus.store.query.AbstractQueryResult.toArray(AbstractQueryResult.java:400)   2018-02-02 00:15:28.675 IST   com.company.projectname.classnames.ErrorHandler errorHandler:
  (ErrorHandler.java:14)java.util.ArrayList.addAll(ArrayList.java:559)   2018-02-02 00:15:28.675 IST   com.company.projectname.classnames.ErrorHandler errorHandler:
  (ErrorHandler.java:14)   com.company.projectname.datastore.DataAccessLayer.searchObjects(DataAccessLayer.java:217)   2018-02-02 00:15:28.675 IST   com.company.projectname.classnames.ErrorHandler errorHandler:
  (ErrorHandler.java:14)   com.company.projectname.businessaccesslayer.Manager.getCustomeAppByURL(Manager.java:1475)   2018-02-02 00:15:28.675 IST   com.company.projectname.classnames.ErrorHandler errorHandler:
  (ErrorHandler.java:14)   com.company.projectname.sso.apps.marketplace.ServletTest.doGet(ServletTest.java:155)   2018-02-02 00:15:28.675 IST   com.company.projectname.classnames.ErrorHandler errorHandler:
  (ErrorHandler.java:14)   javax.servlet.http.HttpServlet.service(HttpServlet.java:617)   2018-02-02 00:15:28.675 IST   com.company.projectname.classnames.ErrorHandler errorHandler:
  (ErrorHandler.java:14)   javax.servlet.http.HttpServlet.service(HttpServlet.java:717)

谢谢。

1 个答案:

答案 0 :(得分:2)

这更像是一个数据问题,而不是代码。在将数据保存或上传到存储之前,您是如何清理数据的?

所以看起来好像是#34; Date"您检索到的数据中的字段实际上并不是正确的"日期"领域。最好的方法是一次检索少量数据,然后将每个结果分成一个唯一的可识别字段。

所以你会看到" John,David,Kate,ERROR",你会知道你的Kate条目中的某个地方,Date字段并不像看起来那样。它可能类似于编码问题或格式化,也可能只是截断的事情。但不管怎样,错误在于您的数据,而不是您的代码。因此,这个问题只会偶尔发生一次(当它遇到坏数据时)。