Google App Engine JDO如何定义实例字段?

时间:2010-04-24 02:10:13

标签: google-app-engine annotations jdo

我有一个这样的课程:

import java.io.*;
import java.util.*;

public class Contact_Info_Entry implements Serializable
{
  public static final long serialVersionUID=26362862L;
  String Contact_Id,First_Name="",Last_Name="",Company_Name="",Branch_Name="",Address_1="",Address_2="",City="",State="",Zip="",Country="",E_Mail="",Phone;
  int I_1,I_2;
  float F_1,F_2;
  boolean B_1,B_2;
  GregorianCalendar Date_1, Date_2;
  Vector<String> A_Vector=new Vector<String>();

  public Contact_Info_Entry() { }

......
}

如果我想将它翻译成JDO的类,我是否需要自己定义每个字段,或者我可以一次分组吗?

例如,我必须这样做:

@PersistenceCapable(identityType=IdentityType.APPLICATION)
public class Contact_Info_Entry implements Serializable
{
  @PrimaryKey
  @Persistent(valueStrategy=IdGeneratorStrategy.IDENTITY)
  private Long id;
  @Persistent
  public static final long serialVersionUID=26362862L;
  @Persistent
  String Contact_Id;
  @Persistent
  String First_Name;
  @Persistent
  String Last_Name;
......
  @Persistent
  int I_1;
  @Persistent
  int I_2;
...
  @Persistent
  float F_1;
...
  @Persistent
  boolean B_1;
  @Persistent
  boolean B_2;
  @Persistent
  GregorianCalendar Date_1;
...
  @Persistent
  Vector<String> A_Vector=new Vector<String>();

  public Contact_Info_Entry() { }

......
}

或者我可以在这样的时间做一组:

@PersistenceCapable(identityType=IdentityType.APPLICATION)
public class Contact_Info_Entry implements Serializable
{
  @PrimaryKey
  @Persistent(valueStrategy=IdGeneratorStrategy.IDENTITY)
  private Long id;
  @Persistent
  public static final long serialVersionUID=26362862L;
  @Persistent
  String Contact_Id,First_Name,Last_Name="";
......
  @Persistent
  int I_1=0,I_2=1;
...
  @Persistent
  float F_1;
...
  @Persistent
  boolean B_1,B_2;
  @Persistent
  GregorianCalendar Date_1;
...
  @Persistent
  Vector<String> A_Vector=new Vector<String>();

  public Contact_Info_Entry() { }

......
}

或者我可以像这样一起跳过“@Persistent”:

import java.io.*;
import java.util.*;

@PersistenceCapable(identityType=IdentityType.APPLICATION)
public class Contact_Info_Entry implements Serializable
{
  public static final long serialVersionUID=26362862L;
  String Contact_Id,First_Name="",Last_Name="",Company_Name="",Branch_Name="",Address_1="",Address_2="",City="",State="",Zip="",Country="",
         E_Mail="",Phone;
  int I_1,I_2;
  float F_1,F_2;
  boolean B_1,B_2;
  GregorianCalendar Date_1, Date_2;
  Vector<String> A_Vector=new Vector<String>();

  public Contact_Info_Entry() { }

......
}

哪个是正确的?

1 个答案:

答案 0 :(得分:1)

您不需要使用@Persistent来注释每个字段。绝大多数类型(基元,它们的包装器,字符串等)默认是持久的。就像你的班级应该写的那样。读 http://www.datanucleus.org/products/accessplatform_1_1/jdo/types.html

您无法保留静态字段 http://www.datanucleus.org/products/accessplatform_1_1/jdo/fields_properties.html

谷歌对所有内容使用@Persistent的文档完全是误导性的

对于同一行上多个字段的声明以及注释是否适用于all,我假设编译器会将注释应用于该行的所有字段,但这与Java以及编译器如何实现注释而不是JDO特有的任何内容。