我的类层次如下 学校 - 包含员工列表 - 其中包含资质列表 员工是学校中的嵌入式列表。我可以坚持一个学校的员工没有问题。现在,当我资格列表添加到雇员作为嵌入式领域,我得到以下错误物体化嵌入式数组内的嵌入式数组无法持久
不能嵌套多个@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);
}
}
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)
中的列表我已将我的代码添加到OP。基本上,只要Employee类中没有Qualifications列表,我就可以坚持一个学校对象,除此之外,我还会看到OP底部显示的错误。我已经尝试过使用和不使用嵌入注释的员工资格列表。 – MayoMan 2013-02-13 06:20:26
摆脱嵌入式注释。它不适用于基元类型列表;嵌入的原因Objectify将类型视为一个类(按字段分解)而不是原始类型。 – stickfigure 2013-02-13 18:55:38
并为了客观化4它是@Serialize,对吧? – 2013-03-05 11:30:00