我正在开发一个简单的Web应用程序,其暴露域模型作为RESTful资源。 我打算用SpringMVC与REST支持使用JPA2(休眠)。
在编组休眠实体到XML / JSON,如果实体被分离它会抛出LazyLoadingException懒惰子关联。 如果实体仍连接到Hibernate的Session它几乎加载整个数据库。
我已经用推土机CustomFieldMapper,以确定是否该属性是未加载则返回NULL懒Hibernate的收藏尝试。
但是,如果我们有双向关联Hibernate的热切加载多对一侧和推土机将尝试复制,这将在无限循环最终导致StackOverflow的错误性质。
唯一的解决办法,我知道解决这个使用的DTO和复制所需的属性只有到干净的POJO(DTO的),然后将编组XML / JSON。 但它是非常痛苦复杂的域模型手动复制性。
是否有一个(不)马歇尔Hibernate的实体的任何其他清洁/更简单的方法?
我曾与传递Hibernate'd VO的来回GWT应用程序类似的问题,在使用推土机,效果良好的一些项目,以及用于其他项目中所描述的方法这篇文章 ,基本上空的休眠代理编组前。
希望可以帮助你,
我听起来过于保守,但我考虑使用的DTO仍然是一个好主意。
在您的映射的复杂程度成正比,你的资源API的粒度,换句话说,粗糙的更加复杂。
以一个战利品在这个类: 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?