我想List<P>
在我的实体中拥有P
:
@Entity
@Index
public class P {
@Id Long id;
String email;
List<P> list = new ArrayList<P>();
}
但是每次我插入新实体时,我都可以在数据存储查看器中看到email
和id
,但没有list
:/列表有什么特殊的工作吗?
我想List<P>
在我的实体中拥有P
:
@Entity
@Index
public class P {
@Id Long id;
String email;
List<P> list = new ArrayList<P>();
}
但是每次我插入新实体时,我都可以在数据存储查看器中看到email
和id
,但没有list
:/列表有什么特殊的工作吗?
您不能在 P 实体中包含 P 列表来进行客观化。不能有任何循环依赖。
您还需要使用 @Embed 关键字在实体中嵌入实体。看这里:http ://code.google.com/p/objectify-appengine/wiki/Entities#Embedded_Collections_and_Arrays
我的建议是分别存储每个实体P
,只保留P
对它“包含”的其他实体的引用。所以,你可以有类似下面的东西:
@Entity
@Index
public class P {
@Id Long id;
String email;
List<Key<P>> list = new ArrayList<Key<P>>();
}
这样,您仍然可以访问您的所有“子”实体,但没有主P
实体中的所有信息。
希望这可以帮助!
更详细的答案:
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);
}
}