有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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中。但是,对于复杂的域模型来说,手动复制属性是非常痛苦的

有没有其他干净/更简单的方法(联合国)马歇尔休眠实体


共 (2) 个答案

  1. # 1 楼答案

    我听起来可能过于保守,但我认为使用DTOS仍然是个好主意。

    映射的复杂性与资源API的粒度成正比,换句话说,越粗越复杂

  2. # 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

    这对我来说很有魅力