java - 嵌入式数组内的对象化嵌入式数组无法持久存在

标签 java google-app-engine objectify

我的类(class)层次结构如下 学校 - 包含员工列表 - 包含资格列表 员工是学校中的嵌入式列表。我可以坚持一所学校及其员工,没有问题。现在,当我将资格列表添加到员工作为嵌入字段时,我收到以下错误

不能嵌套多个@Embedded数组或集合

objectify 文档似乎表明我应该能够做到这一点,前提是对象是可序列化的。我错过了什么吗?如果这是它的工作方式,有没有办法解决它?

更新:

学校类(class)

    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)

最佳答案

有两种不同的注释:

  • @Embed(ofy3 中的 @Embedded)
  • @Serialize(ofy3 中的@Serialized)

如果您想要序列化某些内容,请使用第二个。如果您想要嵌入一些东西,请使用第一个。您不能嵌套 @Embed(ded) 列表,但可以将 @Serialize(d) 列表放入嵌入列表中。

关于java - 嵌入式数组内的对象化嵌入式数组无法持久存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14844637/

相关文章:

python - urlfetch URL 的最大长度未记录?

java - 加载的实体有父级但没有@Parent

java - 泛型 : Inheriting from an abstract class that implements an interface

java - 来自 Intent 服务的 Realm 同步写入

java - Google App Engine - 已删除的实体未删除

java - 已部署的默认留言簿 - 主要次要是什么意思以及如何修复它?

google-app-engine - 使用 appengine 数据存储祖先路径进行高效搜索

java - 使用 Junit + Eclipse 将数据保留在本地存储谷歌应用程序引擎中

java - 生成二维数组中的随机数

java - AWS 使用 JAVA 从 s3 对象创建新文件时出错