【问题标题】:Google App Engine JDO how to define instance fields?Google App Engine JDO 如何定义实例字段?
【发布时间】:2010-04-24 17:08:48
【问题描述】:

我有这样的课:

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() { }

......
}

哪些是正确的?

弗兰克

【问题讨论】:

    标签: google-app-engine annotations jdo


    【解决方案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

    Google 在所有文档中使用 @Persistent 完全具有误导性

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

    【讨论】:

    • 谢谢。我从上面的 url 注意到,在 SCO 类型表中 GregorianCalendar 默认情况下不是持久的,所以在我的示例中,我只需要清除“@Persistent GregorianCalendar Date_1,Date_2;”因为所有其他字段默认情况下都是持久的,我正确吗?
    猜你喜欢
    • 1970-01-01
    • 2010-12-02
    • 1970-01-01
    • 2012-01-25
    • 1970-01-01
    • 2011-10-22
    • 1970-01-01
    • 1970-01-01
    • 2010-12-11
    相关资源
    最近更新 更多