尝试创建一个模型类,使用Eclipse在Google App Engine
中存储实体。但是当我保存我的工作时,我收到错误消息:
org.datanucleus.metadata.MetaDataManager initialiseFileMetaDataForUse。
SEVERE:类“com.packagename.classname”已使用object-id类javax.jdo.identity.StringIdentity指定,但尚未将任何字段标识为主键字段。请注意对应被视为主键一部分的字段使用“primary-key”标记。
如果我对JPA的理解是正确的,我不需要primary-key
作为实体,因为我已经有@Id
标记。这是我的班级。
@Entity
public class MyCLassName {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private static String userName;
private static String location;
private static Date dateOfBirth;
private static int age;
private static String gender;
private static String teamName;
private static int weight;
//Constructor with arguments
public MyClassName(String userName, String location, String gender, int age, Date DOB, int weight) {
MyClassName.userName = userName;
MyClassName.location = location;
MyClassName.gender = gender;
MyClassName.age=age;
MyClassName = DOB;
MyClassName.weight = weight;
}
//setter methods
public static void setUserName(String userName) {
MyClassName.userName = userName;
}
public static void setLocation(String location) {
MyClassName.location = location;
}
public static void setGender(String gender) {
MyClassName.gender = gender;
}
public static void setAge(int age) {
MyClassName.age = age;
}
public static void setDateOfBirth(Date dateOfBirth) {
MyClassName.dateOfBirth = dateOfBirth;
}
public static void setWeight(int weight) {
MyClassName.weight = weight;
}
//getter methods
public static String getUserName() {
return userName;
}
public static int getWeight() {
return weight;
}
public static String getLocation() {
return location;
}
public static String getGender() {
return gender;
}
public static String getTeamName() {
return teamName;
}
public static Date getDateOfBirth() {
return dateOfBirth;
}
public static int getAge() {
return age;
}
}
我到底做错了什么?
答案 0 :(得分:1)
您对JPA的理解部分正确。您不需要分配主键,因为您已使用@Id和@GeneratedValue注释。 JPA实现将自动生成主键值作为长整数。但是,它仍然需要一个存储此ID值的字段。它试图在userName中执行此操作。例如,请参阅Java Tutorial ID Generation Type: IDENTITY。