My Class heirarchy如下 学校 - 包含员工列表 - 其中包含资格列表 员工是学校的嵌入式列表。我可以坚持学校的员工没有问题。现在,当我将资格列表作为嵌入字段添加到员工时,我收到以下错误
您无法嵌套多个@Embedded数组或集合
客观化文档似乎表明如果对象是可序列化的,我应该能够做到这一点。我错过了什么吗?如果这是它的工作方式还有办法吗?
更新
学校班级
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.persistence.Embedded;
import javax.persistence.Id;
import com.googlecode.objectify.annotation.Entity;
@Entity
@SuppressWarnings("serial")
public class School implements Serializable
{
@Id
private String title;
@Embedded
private List<Employee> employees = new ArrayList<Employee>();
public School ()
{
}
public School (String title)
{
this.title = title;
}
public void addEmployee( Employee employee )
{
this.employees.add(employee);
}
}
员工类
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.persistence.Embedded;
import javax.persistence.Id;
import com.googlecode.objectify.annotation.Entity;
@Entity
@SuppressWarnings("serial")
public class Employee implements Serializable
{
@Id
private String title;
@Embedded
private List<String> qualifications = new ArrayList<String>();
public Employee ()
{
}
public Employee (String title)
{
this.title = title;
}
public void addQualification( String qualification )
{
this.qualifications.add(qualification);
}
}
Caused by: java.lang.IllegalStateException: You cannot nest multiple @Embedded arrays or collections. A second was found at private java.util.List com.app.nquizitive.shared.Employee.qualifications
at com.googlecode.objectify.impl.save.EmbeddedMultivalueFieldSaver.<init>(EmbeddedMultivalueFieldSaver.java:36)
at com.googlecode.objectify.impl.save.EmbeddedCollectionFieldSaver.<init>(EmbeddedCollectionFieldSaver.java:21)
at com.googlecode.objectify.impl.save.ClassSaver.<init>(ClassSaver.java:64)
at com.googlecode.objectify.impl.save.EmbeddedMultivalueFieldSaver.<init>(EmbeddedMultivalueFieldSaver.java:43)
at com.googlecode.objectify.impl.save.EmbeddedCollectionFieldSaver.<init>(EmbeddedCollectionFieldSaver.java:21)
at com.googlecode.objectify.impl.save.ClassSaver.<init>(ClassSaver.java:64)
at com.googlecode.objectify.impl.save.ClassSaver.<init>(ClassSaver.java:29)
at com.googlecode.objectify.impl.Transmog.<init>(Transmog.java:322)
at com.googlecode.objectify.impl.ConcreteEntityMetadata.<init>(ConcreteEntityMetadata.java:75)
at com.googlecode.objectify.impl.Registrar.register(Registrar.java:69)
at com.googlecode.objectify.ObjectifyFactory.register(ObjectifyFactory.java:209)
at com.googlecode.objectify.ObjectifyService.register(ObjectifyService.java:38)
at com.app.nquizitive.server.dao.SchoolDao.<clinit>(SchoolDao.java:12)
答案 0 :(得分:1)
有两种不同的注释:
如果您想要序列化某些内容,请使用第二个。如果你想要嵌入的东西,请使用第一个。您不能嵌套@Embed(ded)列表,但可以将@Serialize(d)列表放在嵌入列表中。
答案 1 :(得分:0)
上面哪个类用@Entity注释?听起来学校是一个数据存储实体,而员工则不是(即他们只是序列化为学校)而且资格不是(即他们只是序列化为员工)。
在非实体类中,不需要/相关/允许@Embedded的Objectify注释。