有 Java 编程相关的问题?

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

java My app正在将Db实体序列化到de-webservice层。如何将所有内容都转换为DTO?

我遇到了一个性能有很大问题的应用程序。hibernate实体的定义实际上都是使用渴望的定义。我认为最初这不是一个问题,因为他们只有很少的实体,但是已经到了性能非常糟糕的时候。 我知道如何解决这个问题,但这些实体是在webservice层发布的。 在开始更改数据库模型之前,我想先断开应用程序层。作为表示层中的实体,很难进行更改

我曾想过复制webservice层中的DB实体(没有对持久性层的引用)。这样我就可以创建和实体一样多的DTO。 然后使用objectmapper或jmapper之类的框架将它们转换为新的DTO

在花很多时间做这件事之前。听起来是个好主意?你有没有找到更容易解决问题的方法


共 (1) 个答案

  1. # 1 楼答案

    听起来你在找Blaze-Persistence Entity Views

    我创建了这个库,以便在JPA模型和自定义接口或抽象类定义的模型之间进行简单的映射,类似于类固醇上的Spring数据投影。其思想是以您喜欢的方式定义目标结构(域模型),并通过JPQL表达式将属性(getter)映射到实体模型

    对于Blaze持久性实体视图,示例DTO模型可能如下所示:

    @EntityView(User.class)
    public interface UserDto {
        @IdMapping
        Long getId();
        String getName();
        Set<RoleDto> getRoles();
    
        @EntityView(Role.class)
        interface RoleDto {
            @IdMapping
            Long getId();
            String getName();
        }
    }
    

    查询是将实体视图应用于查询的问题,最简单的就是按id进行查询

    UserDto a = entityViewManager.find(entityManager, UserDto.class, id);

    Spring数据集成允许您像Spring数据投影一样使用它:https://persistence.blazebit.com/documentation/entity-view/manual/en_US/index.html#spring-data-features

    Page<UserDto> findAll(Pageable pageable);
    

    最好的是,它只会获取实际需要的状态