Google App Engine JDO как определить поля экземпляра? - PullRequest
0 голосов
/ 24 апреля 2010

У меня есть такой класс:

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

......
}

Какие из них правильные?

Frank

1 Ответ

1 голос
/ 24 апреля 2010

Вам НЕ нужно аннотировать каждое поле с помощью @Persistent. Подавляющее большинство типов (примитивы, их оболочки, String и т. Д.) По умолчанию являются постоянными. Просто напишите свой класс таким, каким он должен быть. Читать 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.

...