我有一个自相矛盾的问题,但我会尽可能地解释它的意义。
背景
我有一个涉及 Glassfish 3.1.2.2、JPA 2.0(eclipse-link 2.3.3)、MySQL 数据库和独立 Swing 客户端的 3 层应用程序设置。我通过远程接口使用 JNDI 访问 EJB。此外,我使用静态编织是为了从延迟加载复杂关系中受益。在独立的 Swing 客户端上,我使用负载组来选择性地仅获取我真正需要的关系。
目标
为了减少网络流量,我计划使用这个模型映射器将查询到的@Entity注解的数据库对象转换为DTO(Data Transfer Objects,POJO) 。
大问题
在@Entity-Objects 到相应 DTO 的映射过程中,@Entity 上每个字段的访问器都会被访问,这反过来又会从数据库中捕获所有未获取(延迟加载的间接列表)字段,从而导致大再次对象。
我的目标是按原样映射延迟获取的@Entitiy 注释对象,而不获取有意未获取的关系,以便在将对象序列化并传输到远程客户端之前尽可能地保持对象小。
有任何想法吗 ?
编辑:我从使用Dozer的人那里找到了这个线程,我正在为ModelMapper寻找类似的东西。
到目前为止我尝试了什么(没有成功):
- 我在映射之前从实体管理器中分离了查询结果(仍然是懒惰的获取)
- 在查询之后和 DTO 映射之前清除和关闭实体管理器(仍然是惰性获取)
- 将查询到的 List 声明为 final (这样延迟加载机制就不能
覆盖之后获取的属性,但确实如此)
非常感谢您提前提供的帮助!