gpt4 book ai didi

java - 使用 Date 与 datanucleus 和应用程序引擎 (GAE Java) 进行类转换异常

转载 作者:行者123 更新时间:2023-12-01 13:28:02 24 4
gpt4 key购买 nike

我有一个在 GAE 上运行的应用程序,使用 JPA 访问数据存储。

在尝试检索时,我的一种实体类型出现类转换异常。异常(exception)是:

Caused by: java.lang.ClassCastException: org.datanucleus.store.types.sco.simple.Date cannot be cast to java.lang.Long
at com.annkh.entities.PurchasedQuote.jdoReplaceField(PurchasedQuote.java)
at org.datanucleus.state.AbstractStateManager.replaceField(AbstractStateManager.java:2387)
at org.datanucleus.state.JDOStateManager.replaceField(JDOStateManager.java:1877)
at org.datanucleus.state.JDOStateManager.replaceField(JDOStateManager.java:1781)
at org.datanucleus.store.types.sco.SCOUtils.createSCOWrapper(SCOUtils.java:241)
at org.datanucleus.store.types.sco.SCOUtils.newSCOInstance(SCOUtils.java:139)
at org.datanucleus.state.JDOStateManager.wrapSCOField(JDOStateManager.java:2230)
at com.google.appengine.datanucleus.FetchFieldManager.fetchFieldFromEntity(FetchFieldManager.java:468)
at com.google.appengine.datanucleus.FetchFieldManager.fetchObjectField(FetchFieldManager.java:408)
at org.datanucleus.state.AbstractStateManager.replacingObjectField(AbstractStateManager.java:2353)
at com.annkh.entities.PurchasedQuote.jdoReplaceField(PurchasedQuote.java)
at com.annkh.entities.PurchasedQuote.jdoReplaceFields(PurchasedQuote.java)
at org.datanucleus.state.JDOStateManager.replaceFields(JDOStateManager.java:1935)
at org.datanucleus.state.JDOStateManager.replaceFields(JDOStateManager.java:1962)
at com.google.appengine.datanucleus.EntityUtils$1.fetchFields(EntityUtils.java:974)
at org.datanucleus.state.JDOStateManager.loadFieldValues(JDOStateManager.java:764)
at org.datanucleus.state.JDOStateManager.initialiseForHollow(JDOStateManager.java:205)
at org.datanucleus.state.StateManagerFactory.newForHollowPopulated(StateManagerFactory.java:89)
at org.datanucleus.state.ObjectProviderFactory.newForHollowPopulated(ObjectProviderFactory.java:75)
at org.datanucleus.ObjectManagerImpl.findObject(ObjectManagerImpl.java:2882)
at com.google.appengine.datanucleus.EntityUtils.entityToPojo(EntityUtils.java:1014)
at com.google.appengine.datanucleus.query.DatastoreQuery$2.apply(DatastoreQuery.java:229)
at com.google.appengine.datanucleus.query.DatastoreQuery$2.apply(DatastoreQuery.java:226)
at com.google.appengine.datanucleus.query.LazyResult.resolveNext(LazyResult.java:96)
at com.google.appengine.datanucleus.query.LazyResult.resolveAll(LazyResult.java:121)
at com.google.appengine.datanucleus.query.LazyResult.size(LazyResult.java:115)
at com.google.appengine.datanucleus.query.StreamingQueryResult.size(StreamingQueryResult.java:151)
at com.annkh.resources.MIResource.countPurchases(MIResource.java:67)
at com.annkh.resources.MIResource.articlesListView(MIResource.java:60)

该实体有一个名为 datePurchased 的简单 java.util.Date 字段,它似乎导致了问题:

import javax.persistence.Basic;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import java.io.Serializable;
import java.util.Date;

import static javax.persistence.GenerationType.IDENTITY;

@SuppressWarnings("serial")
@Entity
public class PurchasedQuote implements Serializable {
@Id
@GeneratedValue(strategy = IDENTITY)
protected Long id;
<blah blah other fields>

@Basic
protected java.util.Date datePurchased;

public Long getId() {
return id;
}

public void setId(Long id) {
this.id = id;
}


public java.util.Date getDatePurchased() {
return datePurchased;
}

public void setDatePurchased(Date datePurchased) {
this.datePurchased = datePurchased;
}
}

导致错误的调用是一个简单的检索:

List<PurchasedQuote> quotes = purchaseDAO.findAll();
map.put("purchaseCount", quotes.size());

在 appengine 数据查看器中,该日期看起来与其他运行良好的对象中的其他日期没有什么不同。数据存储查看器中字段的类型为 gd:when。

我尝试过其他答案中建议的技巧(使用返回纯 java.util.Date 的方法包装和展开对 get 和 set 的调用),但似乎没有任何帮助。任何建议,将不胜感激。

最佳答案

这不是列/字段的问题datePurchased 。相反,它是您其他字段的问题(在代码中的 <blah blah other fields> 下),其中您的 Long 之一字段被错误地映射为 date类型列。只需一一检查字段和映射即可。供您引用,如果您没有指定字段的列名称,那么默认情况下它将假定字段名称是列名称。例如:

private String testCol;
// by default it assumes the column name as testCol

关于java - 使用 Date 与 datanucleus 和应用程序引擎 (GAE Java) 进行类转换异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21703419/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com