Моя иерархия класса выглядит следующим образом Школа - содержит список сотрудников, которые содержат список квалификаций Employees - это встроенный список в School. Я не могу упорствовать в школе с ее сотрудниками. Теперь, когда я добавляю список квалификации работнику в качестве встроенного поля я получаю следующую ошибкуОбъектизация встроенного массива внутри встроенного массива не может сохраняться
Вы не можете вкладывать несколько @Embedded массивы или коллекции
объективизации документация, кажется, указывает я должен быть в состоянии сделать это при условии, что объекты являются сериализуемыми, какими они являются. Я что-то упускаю? Если это так, как это работает, есть ли способ обойти это?
Update:
Школа Класс
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 не имеет в нем списка квалификаций, иначе я получаю ошибку, показанную внизу OP. Я попробовал список квалификаций сотрудников с аннотацией Embedded и без нее. – MayoMan
Избавьтесь от встроенной аннотации. Это не подходит для списков примитивных типов; Вложенные причины Объектизировать рассматривать тип как класс (разбивая его по полю) вместо примитивного типа. – stickfigure
и для объективации 4 это @ Сериализовать, не так ли? –