Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/305.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

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 在Objectify中持久化类文本_Java_Google App Engine_Objectify - Fatal编程技术网

Java 在Objectify中持久化类文本

Java 在Objectify中持久化类文本,java,google-app-engine,objectify,Java,Google App Engine,Objectify,如果我有一个以类文本作为字段的POJO,我可以将它持久化为Objectify吗 private Class<Foo> fooType; 私有类fooType; 这些文档似乎提出了不同的建议,但我想我应该检查一下以确定: Objectify只能持续存在。Java类型Class不是其中之一 此外,由于以下原因,字段fooType不包含一般参数信息 现在,有两种存储Classtype的方法: 仅存储类的长名称,通过@PrePersist/@PostLoad转换。这样做的好处是,您将获

如果我有一个以类文本作为字段的POJO,我可以将它持久化为Objectify吗

private Class<Foo> fooType;
私有类fooType;
这些文档似乎提出了不同的建议,但我想我应该检查一下以确定:


Objectify只能持续存在。Java类型
Class
不是其中之一

此外,由于以下原因,字段
fooType
不包含一般参数信息

现在,有两种存储
Class
type的方法:

  • 仅存储类的长名称,通过@PrePersist/@PostLoad转换。这样做的好处是,您将获得一个可以查询的普通字符串属性

    @Transient // tells Objectify to ignore field
    public Class<Foo> fooType;
    
    @PrePersist
        public prePersist(Entity entity){
        entity.setProperty("fooType", fooType.getName())
    }
    
    @PostLoad
    public postLoad(Entity entity){
       fooType = Class.forName(entity.getProperty("fooType"));
    }
    

  • 客观化只能持续。Java类型
    Class
    不是其中之一

    此外,由于以下原因,字段
    fooType
    不包含一般参数信息

    现在,有两种存储
    Class
    type的方法:

  • 仅存储类的长名称,通过@PrePersist/@PostLoad转换。这样做的好处是,您将获得一个可以查询的普通字符串属性

    @Transient // tells Objectify to ignore field
    public Class<Foo> fooType;
    
    @PrePersist
        public prePersist(Entity entity){
        entity.setProperty("fooType", fooType.getName())
    }
    
    @PostLoad
    public postLoad(Entity entity){
       fooType = Class.forName(entity.getProperty("fooType"));
    }
    

  • 默认情况下,不会。但是,您可以相当轻松地添加一个转换器,将类作为字符串本地存储在数据存储中。保存时使用Class.getName(),加载时使用Class.forName()

    以下是Objectify3中的一个示例:

    请注意,如果类型与转换器无关,则在单个转换器中返回null。下面介绍如何启用它:

    以下是Objectify4中的等效项:

    下面介绍如何启用它:


    默认情况下,不会。但是,您可以相当轻松地添加一个转换器,将类作为字符串本地存储在数据存储中。保存时使用Class.getName(),加载时使用Class.forName()

    以下是Objectify3中的一个示例:

    请注意,如果类型与转换器无关,则在单个转换器中返回null。下面介绍如何启用它:

    以下是Objectify4中的等效项:

    下面介绍如何启用它:


    我喜欢这两个答案,但我认为龚最好让OP知道如何创建翻译人员,这样他将来可以坚持任何事情。我喜欢这两个答案,但我认为龚最好让OP知道如何创建翻译人员,这样他将来可以坚持任何事情。