java有没有办法在没有DTO的情况下将Hibernate实体公开为RESTful资源?
我正在开发一个简单的webapp,它将域模型公开为RESTful资源。 我计划使用JPA2(Hibernate)和SpringMVC REST支持
在将Hibernate实体编组为XML/JSON时,如果该实体被分离,它将为惰性子关联抛出LazyLoadingException。如果实体仍然连接到Hibernate会话,它将几乎加载整个数据库
我尝试使用Dozer CustomFieldMapper来确定属性是否为未加载的惰性Hibernate集合,然后返回NULL
但是,如果我们有双向关联,Hibernate急切地将多个装载到一个侧面,Dozer将尝试复制属性,这将最终导致无限循环,从而导致堆栈溢出错误
我知道解决这个问题的唯一方法是使用DTO,只将所需的属性复制到干净的POJO(DTO)中,然后编组到XML/JSON中。但是,对于复杂的域模型来说,手动复制属性是非常痛苦的
有没有其他干净/更简单的方法(联合国)马歇尔休眠实体
# 1 楼答案
映射的复杂性与资源API的粒度成正比,换句话说,越粗越复杂
# 2 楼答案
在这门课上吃点东西:https://github.com/viniciuspires/reqlist/blob/master/src/main/java/org/reqlist/arch/HibernateAwareObjectMapper.java
我将Jackson用作JSON序列化程序/反序列化程序,我必须创建这个类,并为其添加Hibernate4Module,以验证
Hibernate.isInitialized
是否存在意外初始化属性的情况之后,只需将其配置为
ObjectMapper
,并将其传递给MessageConverters
数组,就像我在这一行中所做的那样:https://github.com/viniciuspires/reqlist/blob/master/src/main/resources/META-INF/org.reqlist.context.xml#L21
这对我来说很有魅力