【问题标题】:Using DTO or Value Object pattern to counter lazy loading exceptions使用 DTO 或值对象模式来应对延迟加载异常
【发布时间】:2012-06-01 01:46:03
【问题描述】:

只是 Java/Hibernate/Spring/Mysql 堆栈中的架构问题

我应该在我的服务层中使用 OpenSessionInView 模式还是使用 DTO 对象来应对延迟加载异常。

从服务层返回域/实体对象是一种好习惯吗?还是返回 DTO 对象,稍后在 web 服务层序列化为 xml/json 是一种好习惯。

【问题讨论】:

    标签: java spring hibernate rest dto


    【解决方案1】:

    我遵循一个非常简单的规则:

    DTO 或多或少是从一个域到另一个域的转换。这意味着我仅在两层之间有物理分离时才使用 DTO。

    意思是如果你有 JSP,你可以使用 OpenSessionInView 模式来避免翻译模型等的大量过度工作。

    【讨论】:

      【解决方案2】:

      我总是使用 DTO 方法,因为在视图反模式中打开会话的性能影响不可预测。

      我为那个用例创建了Blaze-Persistence Entity Views。您基本上将 JPA 实体的 DTO 定义为接口并将它们应用于查询。它支持映射嵌套 DTO、集合等,基本上是您所期望的一切,最重要的是,它会提高您的查询性能,因为它会生成查询,只获取 DTO 实际需要的数据。

      您示例的实体视图可能如下所示

      @EntityView(Person.class)
      interface PersonDto {
        String getName();
      }
      

      查询可能如下所示

      List<PersonDto> dtos = entityViewManager.applySetting(
        EntityViewSetting.create(PersonDto.class),
        criteriaBuilderFactory.create(em, Person.class)
      ).getResultList();
      

      【讨论】:

        猜你喜欢
        • 2023-03-13
        • 2011-10-10
        • 2011-02-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多