私はいくつかのフィールドがクラスそのものであるクラスをGAE DBに格納しようとしています。 詳細に進む前に、私はこれらの新しいクラスフィールドを追加する前にうまくいきました。 だから、私はここにドキュメントを追っ:https://developers.google.com/appengine/docs/java/datastore/jdo/dataclasses と、私はこのエラーを取得しています:クラスは持続性ではありませんか?
org.datanucleus.jdo.exceptions.ClassNotPersistenceCapableException:クラス「クラス 『sporteam.web.client.User』をされてこれは、拡張されていないか、拡張バージョンのファイルがCLASSPATHにない(拡張されていないバージョンによって隠されている)か、クラスのメタデータ/注釈が見つからないことを意味します。持続可能ではありません。これは、拡張されていないか、拡張バージョンのファイルがCLASSPATHにない(拡張されていないバージョンで隠されている)か、クラスのメタデータが見つからないことを意味します。
私が使用しようとしている主なクラスがユーザーである:
@SuppressWarnings("serial")
@PersistenceCapable(identityType = IdentityType.APPLICATION)
public class User implements Serializable
{
// data members
// user unique facebook id
@Persistent
@PrimaryKey
private String facebook_id;
// users facebook code
@Persistent
private String facebook_code;
// users device ID code
@Persistent
private String dev_id;
// users registration ID code
@Persistent
private String reg_id;
// user first name
@Persistent
private String first_name;
// user last name
@Persistent
private String last_name;
// user age, should be grater then 8
@Persistent
private int age;
// user email, as setup in facebook
@Persistent
private String email;
// user weight, should be greater then 40
@Persistent
private double weight;
// user workout_level (0.8 is the highest(best shape) and 1 is the lowest)
@Persistent
private double workout_level;
// user gender ("male"/"female"/"unknown")
@Persistent
private String gender;
@Persistent
@Embedded
private UserTracks userTracks = null;
// default constructor
public User()
{
}
//....
}
これはUserTracksクラスです:
:@PersistenceCapable
@EmbeddedOnly
@SuppressWarnings("serial")
public class UserTracks implements Serializable
{
@Persistent
@Embedded
//@Element(embedded="true")
private List<Track> tracks = null;
@Persistent
private long date = 0;
public UserTracks()
{
}
}
そして論文を使用し、他の2クラスであります
@PersistenceCapable
@EmbeddedOnly
@SuppressWarnings("serial")
public class Track implements Serializable
{
/** running information **/
@Persistent
private double avgSpeed = 0;
@Persistent
private double distance = 0;
@Persistent
private double calories = 0;
@Persistent
private long time = 0;
/************************/
@Persistent
private long date = 0;
@Persistent
private String name = null;
@Persistent
@Embedded
private List<GeoPtr> track = null;
public Track()
{ // needed for Serializable
}
}
GeoPtr:
すべてのクラスはPersistenceCapableであり、すべてのフィールドはPersistenceCapable自身またはそのコレクションであり、上のドキュメントに従って動作するはずです。
アイデア?
おかげ
"これは拡張されていないか、またはファイルの拡張バージョンがCLASSPATHにない(拡張されていないバージョンによって隠されている)、またはメタデータ/アノテーションがクラスが見つかりません。そのうちのどれが当てはまるのでしょうか? CLASSPATHにあるものと、拡張されているかどうかを簡単に確認できます(javapはクラスのメソッドを教えてくれます) – DataNucleus