Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在嵌入式阵列can';不坚持_Java_Google App Engine_Objectify - Fatal编程技术网

Java 在嵌入式阵列can';不坚持

Java 在嵌入式阵列can';不坚持,java,google-app-engine,objectify,Java,Google App Engine,Objectify,我的阶级继承权如下 学校-包含员工列表-包含资格列表 员工是学校里的一个嵌入式列表。我可以坚持一所学校的员工没有问题。现在,当我将资格列表作为嵌入字段添加到员工时,我得到以下错误 不能嵌套多个@Embedded数组或集合 objectify文档似乎表明,如果对象是可序列化的,那么我应该能够做到这一点。我错过什么了吗?如果这是它的工作方式,有办法吗 更新: 学校班级 import java.io.Serializable; import java.util.ArrayList;

我的阶级继承权如下 学校-包含员工列表-包含资格列表 员工是学校里的一个嵌入式列表。我可以坚持一所学校的员工没有问题。现在,当我将资格列表作为嵌入字段添加到员工时,我得到以下错误

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

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

更新:

学校班级

    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;
导入java.util.ArrayList;
导入java.util.List;
导入javax.persistence.Embedded;
导入javax.persistence.Id;
导入com.googlecode.objectify.annotation.Entity;
@实体
@抑制警告(“串行”)
公立学校实施可序列化
{
@身份证
私有字符串标题;
@嵌入
private List employees=new ArrayList();
公立学校()
{       
}
公立学校(字符串标题)
{       
this.title=标题;
}
公共无效添加员工(员工)
{
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)
import java.io.Serializable;
导入java.util.ArrayList;
导入java.util.List;
导入javax.persistence.Embedded;
导入javax.persistence.Id;
导入com.googlecode.objectify.annotation.Entity;
@实体
@抑制警告(“串行”)
公共类Employee实现了可序列化
{
@身份证
私有字符串标题;
@嵌入
私有列表资格=新的ArrayList();
公职人员()
{       
}
公职人员(字符串标题)
{       
this.title=标题;
}
公共资格(字符串资格)
{
本.资格.添加(资格);
}
}
原因:java.lang.IllegalStateException:无法嵌套多个@Embedded数组或集合。第二个是在private java.util.List com.app.nquitive.shared.Employee.qualifications上找到的
位于com.googlecode.objectify.impl.save.EmbeddedMultivalueFieldSaver.(EmbeddedMultivalueFieldSaver.java:36)
位于com.googlecode.objectify.impl.save.EmbeddedCollectionFieldSaver。(EmbeddedCollectionFieldSaver.java:21)
位于com.googlecode.objectify.impl.save.ClassSaver.(ClassSaver.java:64)
在com.googlecode.objectify.impl.save.EmbeddedMultivalueFieldSaver上。(EmbeddedMultivalueFieldSaver.java:43)
位于com.googlecode.objectify.impl.save.EmbeddedCollectionFieldSaver。(EmbeddedCollectionFieldSaver.java:21)
位于com.googlecode.objectify.impl.save.ClassSaver.(ClassSaver.java:64)
位于com.googlecode.objectify.impl.save.ClassSaver.(ClassSaver.java:29)
位于com.googlecode.objectify.impl.Transmog.(Transmog.java:322)
位于com.googlecode.objectify.impl.ConcreteEntityMetadata.(ConcreteEntityMetadata.java:75)
位于com.googlecode.objectify.impl.register.register(register.java:69)
位于com.googlecode.objectify.ObjectifyFactory.register(ObjectifyFactory.java:209)
位于com.googlecode.objectify.ObjectifyService.register(ObjectifyService.java:38)
位于com.app.nquitive.server.dao.SchoolDao(SchoolDao.java:12)

上面哪些类用@Entity注释?听起来学校是一个数据存储实体,而员工不是(即,他们只是序列化到学校中),资格不是(即,他们只是序列化到员工中)


在非实体类中,@Embedded的Objectify注释是不需要/相关/允许的。

有两种不同的注释:

  • @嵌入(@Embedded in of Y3)
  • @序列化(在ofy3中@Serialized)

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

我已将代码添加到OP中。基本上,只要Employee类中没有资格列表,我就可以保留学校对象,另一方面,我得到了OP底部显示的错误。我已经尝试了包含和不包含嵌入注释的员工资格列表。去掉嵌入注释。它不适用于基元类型的列表;Embedded使Objectify将类型视为类(按字段细分),而不是基元类型。它们都是entitys。我已经试过了,有@Entity注释的员工和没有@Entity注释的员工。它似乎不喜欢子实体/类中的列表