JPA实体何时以及为何应实现Serializable接口?

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

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

但是,当域模型变得更加复杂时,我遇到了RuntimeException,它表示我的一个实体没有实现Serializable。

我使用Hibernate作为JPA实现。

我想知道:

  1. 它是特定于供应商的要求/行为吗?

  2. 我的可序列化实体会怎样?它们应该可序列化以存储或传输吗?

  3. 何时需要使我的实体可序列化?


慕沐林林
浏览 630回答 3
3回答

芜湖不芜

如果您混合使用HQL和本机SQL查询,通常会发生这种情况。在HQL中,Hibernate将您传递的类型映射到数据库可以理解的任何类型。运行本机SQL时,必须自己进行映射。如果您不这样做,则默认映射是序列化参数并将其发送到数据库(以希望它能理解它)。

aluckdog

根据JPA规范:如果要通过值将实体实例作为分离的对象(例如,通过远程接口)传递,则实体类必须实现Serializable接口。“ JSR 220:Enterprise JavaBeansTM,版本3.0 Java Persistence API版本3.0,最终版本,2006年5月2日”

Cats萌萌

Serializable如果需要通过有线方式传输它们(将它们序列化为其他表示形式),将它们存储在http会话中(然后由servlet容器序列化到硬盘上)等,则需要实体。仅仅出于持久性的考虑,Serializable并不需要,至少对于Hibernate而言。但是制作它们是一种最佳实践Serializable。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java