0

現在、次の列を含む CSV ファイルを Google App Engine データストアにアップロードしています。

id, roleName, eggName, highestAllTimePrice, lowestAllTimePrice, averagePrice

localhost:8888/_ah/admin/datastore に移動したときのテーブルの結果は次のとおりです。

Key, Write Ops, ID/Name, averagePrice, eggName, eggNumber, highestAllTimePrice, lowestAllTimePrice, roleName

次のように、テーブルからすべてのデータを取得します。

public String GetData(final ModelMap model)
{
    EntityManager em = EMF.get().createEntityManager();
    Query q = em.createQuery("SELECT s FROM Egg s");
    List<Egg> eggs = new ArrayList<Egg>(q.getResultList());

    model.addAttribute("eggs", eggs);
    return "index";
}

実在物

@Entity
public class Egg {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Key key;

    private int eggNumber;
    private String roleName;
    private String eggName;
    private double highestPrice;
    private double lowestPrice;
    private double averagePrice;

    // getters setters
}

しかし、そのクエリを実行すると、次のエラーが発生します。

java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Double
    at com.google.appengine.datanucleus.FetchFieldManager.fetchDoubleField(FetchFieldManager.java:140)
    at org.datanucleus.state.AbstractStateManager.replacingDoubleField(AbstractStateManager.java:2256)
    at Entity.Egg.jdoReplaceField(Egg.java)
    at Entity.Egg.jdoReplaceFields(Egg.java)

問題は、型を変換している理由がわからないことです。エンティティ クラスを間違ってマッピングしましたか?

4

1 に答える 1

1

おそらく、二重フィールド (highestPrice など) はデータストア内の文字列と見なされるため、エンティティにマップできません。

于 2013-04-07T16:35:14.433 に答える