将带有列表的休眠 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<Serializable>
,但是生成的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以上是关于将带有列表的休眠 POJO 转换为可序列化的 rpc 返回对象的主要内容,如果未能解决你的问题,请参考以下文章
使用spring boot将JSON反序列化为带有通用对象列表的POJO
Java Jackson将空字段反序列化为POJO中的默认空列表