1

我想List<P>在我的实体中拥有P

@Entity
@Index
public class P {
    @Id Long id;
    String email;
    List<P> list = new ArrayList<P>();
}

但是每次我插入新实体时,我都可以在数据存储查看器中看到emailid,但没有list:/列表有什么特殊的工作吗?

4

3 回答 3

2

您不能在 P 实体中包含 P 列表来进行客观化。不能有任何循环依赖。

您还需要使用 @Embed 关键字在实体中嵌入实体。看这里:http ://code.google.com/p/objectify-appengine/wiki/Entities#Embedded_Collections_and_Arrays

于 2012-10-15T21:18:16.263 回答
2

我的建议是分别存储每个实体P,只保留P对它“包含”的其他实体的引用。所以,你可以有类似下面的东西:

@Entity
@Index
public class P {
    @Id Long id;
    String email;
    List<Key<P>> list = new ArrayList<Key<P>>();
}

这样,您仍然可以访问您的所有“子”实体,但没有主P实体中的所有信息。

希望这可以帮助!

于 2012-10-17T09:49:10.120 回答
0

更详细的答案:

package com.netcomps.objectify_test;

import com.googlecode.objectify.annotation.Entity;
import com.googlecode.objectify.annotation.Id;
import com.googlecode.objectify.annotation.Index;
import com.googlecode.objectify.annotation.Parent;
import com.googlecode.objectify.Key;

import java.lang.String;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;


@Entity
public class User {
  @Parent Key<World> theWorld;
  @Id public Long id;

  public String email;
  public String name;
  @Index public Date date;
  //public ArrayList<User> friends;
  List<Key<User>> friends;

  /**
   * Simple constructor just sets the date
   **/
  public User() {
    date = new Date();
  }

  /**
   * A connivence constructor
   **/
  public User(String world, String name) {
    this();
    if( world != null ) {
        theWorld = Key.create(World.class, world);  // Creating the Ancestor key
    } else {
        theWorld = Key.create(World.class, "default");
    }
    this.name = name;
  }

  /**
   * Takes all important fields
   **/
  public User(String book, String content, String email) {
    this(book, content);
    this.email = email;
  }


  public void addFriend(User friend) {
      if (friends == null) {
          friends = new ArrayList<Key<User>>();
      }
      Key<User> f = Key.create(theWorld, User.class, friend.id);
      friends.add(f);
  }


}
于 2015-08-25T15:32:35.493 回答