gpt4 book ai didi

java - 如何防止 eclipse-link 在 DTO 映射期间获取延迟加载的属性?

转载 作者:行者123 更新时间:2023-12-04 04:50:18 25 4
gpt4 key购买 nike

我有一个自相矛盾的问题,但我会尽可能地解释它的意义。

背景

我有一个涉及 Glassfish 3.1.2.2、JPA 2.0(eclipse-link 2.3.3)、MySQL 数据库和独立 Swing 客户端的 3 层应用程序设置。我通过远程接口(interface)使用 JNDI 访问 EJB。此外,我使用静态编织是为了从延迟加载复杂关系中受益。在独立的 Swing 客户端上,我使用负载组来选择性地仅获取我真正需要的关系。

目标

为了减少网络流量,我计划使用这个model mapper将查询到的@Entity注解的数据库对象转换为DTO(数据传输对象,POJO)。 .

大问题

在@Entity-Objects 到相应 DTO 的映射过程中,@Entity 上每个字段的访问器都会被访问,这反过来又会从数据库中捕获所有未获取(延迟加载的间接列表)字段,从而导致大再次对象。

我的目标是按原样映射延迟获取的@Entitiy 注释对象,而不获取有意未获取的关系,以便在将对象序列化并传输到远程客户端之前尽可能地保持对象小。

有任何想法吗 ?

编辑:我发现 this thread来自使用 Dozer 的人,我正在为 ModelMapper 寻找类似的东西.

到目前为止我尝试过的(没有成功):

  • 我在映射之前从实体管理器中分离了查询结果
    (仍然懒惰获取)
  • 查询后清空并关闭实体管理器
    在 DTO 映射之前(仍然是延迟获取)
  • 声明查询
    List final (使延迟加载机制无法

  • 覆盖之后获取的属性,但确实如此)

    非常感谢您提前提供的帮助!

    最佳答案

    如果您的映射器无法配置为仅映射部分对象,那么您可以在将持久性对象传递给映射器之前创建其副本。

    要么使用您自己的仅复制所需属性的复制方法,要么您可以在 EclipseLink 中使用 CopyGroups,

    http://wiki.eclipse.org/EclipseLink/Examples/JPA/AttributeGroup#Copy_Examples

    关于java - 如何防止 eclipse-link 在 DTO 映射期间获取延迟加载的属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17530290/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com