JPA 实体何时以及为何应该实现可序列化接口?

2022-08-31 06:25:44

问题在标题中。下面我只是描述了我的一些想法和发现。

当我有一个非常简单的域模型(3个没有任何关系的表)时,我的所有实体都没有实现接口。Serializable

但是当域模型变得更加复杂时,我得到了一个,说我的一个实体没有实现。RuntimeExceptionSerializable

我使用Hibernate作为JPA实现,我想知道:

  1. 这是特定于供应商的要求/行为吗?
  2. 我的可序列化实体会发生什么情况?它们是否应该可序列化以进行存储或传输?
  3. 在什么时候有必要使我的实体可序列化?

答案 1

根据 JPA 规范:

如果要将实体实例作为分离对象(例如,通过远程接口)按值传递,则实体类必须实现可序列化接口。

“JSR 220: Enterprise JavaBeansTM,Version 3.0 Java Persistence API Version 3.0,最终发布 May 2, 2006”


答案 2

如果您需要通过网络传输实体(将它们序列化为其他表示形式),将它们存储在http会话中(然后由servlet容器序列化为硬盘)等,则需要您的实体。Serializable

只是为了坚持,是不需要的,至少对于Hibernate来说是这样。但是,最佳做法是 使它们 .SerializableSerializable