【问题标题】:Transient field causing serializeable error导致可序列化错误的瞬态字段
【发布时间】:2014-02-19 16:56:21
【问题描述】:

我有一个类标记了两个可序列化的字段

@Transient
private List<Edge> edges;

@Transient
private List<Cell> cells;

当我从服务器获取此实例到我的应用程序时,此方法有效。这是一个应用程序客户端。当我尝试将此类的实例保存回服务器时,出现序列化错误。

WARNING: 00100006: Class pojo.Cell is not Serializable
at beans._MazeBeanRemote_Wrapper.saveMaze(beans/_MazeBeanRemote_Wrapper.java)

谁能告诉我为什么会出现这个错误以及如何解决它?

【问题讨论】:

  • 也许你的注释没有像他们应该的那样工作?
  • 这是我的想法,但我如何让它们双向工作?
  • 尽量让他们简单private transient
  • 谢谢你这样做。似乎 @Transient 注释只适用于服务器到客户端,我需要使用 transient 关键字才能让它以另一种方式工作。

标签: java serialization glassfish ejb transient


【解决方案1】:

您的注释似乎不起作用。

尽量让你的字段简单private transient

【讨论】:

    【解决方案2】:

    你在课堂上实现了Serializable 接口吗?

    transient 表示这个特定的字段不会被序列化。

    【讨论】:

    • 我没有实现可序列化,因为我不希望这些字段可序列化。这就是为什么它们被标记为@Transient 但它似乎只以一种方式工作。
    • 在这种情况下,您基本上应该实现 Serializable,但将这些字段标记为瞬态。所以除了edgescells之外的其余字段都会被序列化
    【解决方案3】:

    也许有一个混淆,有两种Transient:

    transient : java 关键字表示不可序列化的字段

    @Transient : JPA 注释,表示该字段不会被持久化

    在您的情况下,封闭类可以实现Serializable 接口,并用transient 标记字段(以及字段的类)。

    【讨论】:

      猜你喜欢
      • 2019-02-08
      • 2016-07-01
      • 1970-01-01
      • 2012-07-05
      • 1970-01-01
      • 2021-04-22
      • 2020-04-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多