【问题标题】:Embedded entity "with Text" reading from originaly stored as Blob从原始存储为 Blob 读取的嵌入式实体“带有文本”
【发布时间】:2020-11-12 23:15:52
【问题描述】:

除了first question with working answer

我无法反序列化以下内容

private @Serialize List<ProduktSprache> produktsprachen;

新类看起来像这样存储为 Blob,最初有两个字段定义为 Text:

import java.io.Serializable;

import com.googlecode.objectify.annotation.Serialize;

public class ProduktSprache implements Serializable {
    private static final long serialVersionUID = 1L;

    private String sprache;
    private String name;
    private String details;
    private String detailsText; // TEXT
    private String detailsTextHTML; // TEXT 

【问题讨论】:

  • 你遇到了什么错误?
  • ... ProduktSprache 无法反序列化(来自 Blob)。这又是原始数据存储处理的问题。
  • 该字段被保存为:@Persistent(serialized = "true", defaultFetchGroup = "true") private List produktsprachen;今天记录的错误是:com.googlecode.objectify.impl.EntityMetadata.load> Error loading !1:Produkt(5646485207121920): At path 'produktsprachen': Unable to deserialize

标签: java google-app-engine google-cloud-datastore objectify


【解决方案1】:

真的很难说出这里发生了什么,但听起来你有一些数据被序列化(使用 java 序列化)到字段中。为了弄清楚这一点,我会尽量简化它。

序列化数据以Blob 类型写入实体中。因此,第一步是将您的produktsprachen 字段更改为输入Blob。现在您可以加载实体,并且您可以使用 byte[] 的数据。

接下来,尝试解码 byte[]。使用ObjectInputStream 阅读内容并检查您实际拥有的内容。无论您找到什么结构,最终都需要将其用作 Objectify 实体类中的 @Serialized 字段类型。

【讨论】:

  • 所以我放弃并将所有字段迁移到 JSON。这很容易。
猜你喜欢
  • 2020-11-07
  • 2021-04-01
  • 2012-06-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-17
相关资源
最近更新 更多