为啥在 JPA 2/Hibernate 中使用共享主键时实体需要可序列化?

Posted

技术标签:

【中文标题】为啥在 JPA 2/Hibernate 中使用共享主键时实体需要可序列化?【英文标题】:Why does an Entity need to be serializable when using shared primary key in JPA 2/Hibernate?为什么在 JPA 2/Hibernate 中使用共享主键时实体需要可序列化? 【发布时间】:2011-07-27 21:46:24 【问题描述】:

所以我有以下情况:

@Entity
class Image 
  @Id
  @GeneratedValue
  private Long id;

  ....


@Entity
class ImageData implements Serializable 
  @Id
  @OneToOne
  private Image image;

  ....

这一切都很好,但为什么 ImageData 需要可序列化?如果不是我得到它需要可序列化的异常:

 org.hibernate.MappingException: composite-id class must implement Serializable:...

我知道 Identifier 需要可序列化,但为什么现在反过来了?

【问题讨论】:

这很奇怪 - 我的印象是 所有 JPA 实体类都需要可序列化。 如果你没有任何特定于hibernate的东西,你可以尝试用eclipselink替换它,看看这个行为是否一致。如果不是 - 提出问题。 Why composite-id class must implement Serializable?的可能重复 【参考方案1】:

Hibernate 论坛上有一个类似主题的讨论应该回答你的问题,看看here

【讨论】:

好吧,他们还说具有复合 ID 的类需要可序列化,但不是为什么......

以上是关于为啥在 JPA 2/Hibernate 中使用共享主键时实体需要可序列化?的主要内容,如果未能解决你的问题,请参考以下文章

标准 JPA 2,Hibernate - 多重连接

JPA 2.0 (Hibernate) 使用 @JoinTable 为 @OneToMany 生成不正确的连接表 PK

使用 JPA 2.1 / Hibernate 4 将值列表传递给存储过程

Spring Data JPA 1.9.2 + Hibernate 4.3+ 问题

jpa规范中,对于model类有何要求

hibernate getResultList() 返回不同的数据