有没有一种方法暴露Hibernate的实体为无DTO的RESTful资源?(Is there a w

2019-07-17 19:37发布

我正在开发一个简单的Web应用程序,其暴露域模型作为RESTful资源。 我打算用SpringMVC与REST支持使用JPA2(休眠)。

在编组休眠实体到XML / JSON,如果实体被分离它会抛出LazyLoadingException懒惰子关联。 如果实体仍连接到Hibernate的Session它几乎加载整个数据库。

我已经用推土机CustomFieldMapper,以确定是否该属性是未加载则返回NULL懒Hibernate的收藏尝试。

但是,如果我们有双向关联Hibernate的热切加载多对一侧和推土机将尝试复制,这将在无限循环最终导致StackOverflow的错误性质。

唯一的解决办法,我知道解决这个使用的DTO和复制所需的属性只有到干净的POJO(DTO的),然后将编组XML / JSON。 但它是非常痛苦复杂的域模型手动复制性。

是否有一个(不)马歇尔Hibernate的实体的任何其他清洁/更简单的方法?

Answer 1:

我曾与传递Hibernate'd VO的来回GWT应用程序类似的问题,在使用推土机,效果良好的一些项目,以及用于其他项目中所描述的方法这篇文章 ,基本上空的休眠代理编组前。

希望可以帮助你,



Answer 2:

我听起来过于保守,但我考虑使用的DTO仍然是一个好主意。

在您的映射的复杂程度成正比,你的资源API的粒度,换句话说,粗糙的更加复杂。



Answer 3:

以一个战利品在这个类: https://github.com/viniciuspires/reqlist/blob/master/src/main/java/org/reqlist/arch/HibernateAwareObjectMapper.java

我使用杰克逊作为一个JSON串行器/解串器,我不得不做出这个类,并添加Hibernate4Module它以验证是否Hibernate.isInitialized不不期而遇初始化属性。

之后,你就必须将其配置为您的ObjectMapper ,并把它传递给MessageConverters阵列,因为我在这行做的:

https://github.com/viniciuspires/reqlist/blob/master/src/main/resources/META-INF/org.reqlist.context.xml#L21

这工作对我来说就像魅力。



文章来源: Is there a way to expose Hibernate Entities as RESTful resources without DTOs?