Google Objectify v4由id获取

时间:2012-11-08 02:58:37

标签: gwt objectify

我正在尝试使用Objectify v4在App Engine中获取实体,但它不起作用。

  • 我的@Entity: Translation.class
  • 我想要获取@Entity的@Id: 301L

我的@Entity:

@Entity
public class Translation {
  @Id
  private Long id;
  private String text;

  public String getText() {
    return text;
  }

  public Long getId() {
    return id;
  }

  public void setText(String text) {
    this.text = text;
  }
}

没有说出来的请求:

Translation translation =ObjectifyService.ofy().load().type(Translation.class).id(301L).get(); // translation is null

但如果我这样做:

 Translation translation = ObjectifyService.ofy().load().type(Translation.class).first().get(); // translation is not null

然后:

System.out.println(translation.getId()); // translation id equal 301

所以按ID 获取似乎不起作用。 问题在哪里?

2 个答案:

答案 0 :(得分:5)

由于您的实体有一个@Parent字段,为了通过ID获取它,您需要执行:

Translation translation = ObjectifyService.ofy().load().type(Thing.class).parent(par).id(301).get();

有关详细信息,请查看Objectify Basic Operations - Loading

希望这有帮助!

答案 1 :(得分:0)

对于@stickfigure,这是我的真实@Entity(PartOfSpeechGroup显然也是@Entity)。

@Entity
public class Translation implements IsSerializable {
  @Id
  private Long id;
  private String text;
  @Parent
  private Key<PartOfSpeechGroup> partOfSpeechEntryKey;

  public Translation() {}

  public Translation(Key<PartOfSpeechGroup> partOfSpeechEntryKey) {
    this.partOfSpeechEntryKey = partOfSpeechEntryKey;
  }

  public String getText() {
    return text;
  }

  public Long getId() {
    return id;
  }

  public Key<PartOfSpeechGroup> getPartOfSpeechEntryKey() {
    return partOfSpeechEntryKey;
  }

  public void setText(String text) {
    this.text = text;
  }
}