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

标签 java jpa lazy-loading glassfish-3 data-transfer-objects

我有一个有点矛盾的问题,但我会尽力解释得尽可能有意义。

背景

我有一个 3 层应用程序设置,涉及 Glassfish 3.1.2.2、JPA 2.0 (eclipse-link 2.3.3)、MySQL 数据库和独立的 Swing-Client。我通过远程接口(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/

相关文章:

java - 基于GWT的开源电子商务解决方案

java - 将 TimeUnit 转换为 ChronoUnit?

java - JPA 将属性存储为行

mysql - 可选用户设置应该延迟初始化到数据库中还是始终使用新注册创建?

rust - 如何返回对 RefCell<Option<T>>> 内部数据的引用?

java - 它是 JAX-RS 中 UriBuilder 的正确行为吗?

java - 像 HashMap 但排序的东西?

java - 将 native 查询结果映射到 POJO,而无需在查询执行时在数据库中创建与其对应的表

java - 如何更改hibernate为主键字段插入的默认值?

javascript - 延迟加载图像加载页面上的所有图像