将带有列表的休眠 POJO 转换为可序列化的 rpc 返回对象

Posted

技术标签:

【中文标题】将带有列表的休眠 POJO 转换为可序列化的 rpc 返回对象【英文标题】:covert a hibernate POJO with list into a serializable rpc return object 【发布时间】:2018-03-05 09:36:50 【问题描述】:

hibernate POJO只允许list这个接口映射多对一的关系。

public class Employee 
private int id;
private String firstName; 
private String lastName;   
private int salary;
private List certificates;

但是 GWT-RPC 只允许具体类型,例如 ArrayList,作为返回。 所以,与其为 RPC 定义一个与 ArrayList 类似的类,

public class EmployeeRPC 
private int id;
private String firstName; 
private String lastName;   
private int salary;
private **ArrayList<Certificate>** certificates;

还有其他方法可以将休眠 POJO 转换为可序列化的对象吗?

谢谢

【问题讨论】:

你的意思是一对多的关系。与您的问题无关,但除非您需要特殊排序,否则最好将 Set 用于 JPA 实体中的集合 - Set 性能更好,您可以在一个查询中获取多个 Set(您不能使用 Lists/Bags 来做到这一点)。 感谢您的回复。但我的观点是将休眠 POJO 转换为 GWT-RPC 兼容对象。 【参考方案1】:

你可以使用List&lt;Serializable&gt;,但是生成的javascript会更大。

当通过 RPC 调用传递对象时,在 RPC 接口中声明具体的参数类型是一个好习惯。如果由于某种原因您不能在 RPC 接口中使用具体类,请尝试尽可能具体。 这是因为 GWT 编译器在发出 javascript 时必须考虑编译单元中 List 的所有可能变体。这包括类路径中扩展 List 和 Serializable 接口的所有类。排列可能很大,这会影响您的编译时间以及应用程序的下载大小。

Full answer here

为 GWT RPC 制作可序列化的类:

如果一个类满足以下三个要求,则它是可序列化的: - 它实现了 Java Serializable 或 GWT IsSerializable 接口,要么直接实现,要么因为它派生自具有此功能的超类。 - 它的非最终、非瞬态实例字段本身是可序列化的,并且 - 它有一个带有任何访问修饰符的默认(零参数)构造函数(例如 private Foo() 将起作用)

Docu

您必须将这些内容添加到您的课程中... 还要确保Certificate 是可序列化的。

或者只使用 JSON:resty-gwt、gwt-jackson

【讨论】:

感谢您的回复。 List 可以通过 GWT RPC 传递吗? List 本身不可序列化,但 ArrayList 是。

以上是关于将带有列表的休眠 POJO 转换为可序列化的 rpc 返回对象的主要内容,如果未能解决你的问题,请参考以下文章

将休眠查询的结果转置为 POJO 列表

使用spring boot将JSON反序列化为带有通用对象列表的POJO

将拖动的项目转换为可放置的

Java Jackson将空字段反序列化为POJO中的默认空列表

如何使用休眠和旧版数据库从 char 字段 pojo 中修剪空格

如何将 csv 文件转换为可作为文本读取的列表列表? Python