7

我使用 DataNucleus 作为 JPA 实现将我的类存储在我的 Web 应用程序中。我使用了一组转换器,它们都具有toDTO()fromDTO().

我的问题是,我想避免通过网络发送整个数据库:

  • 如果我延迟加载,转换器将尝试访问所有字段,然后加载(导致非常急切的加载)。
  • 如果我不延迟加载,我将获得数据库的很大一部分,因为用户包含组,组包含用户,等等。

有没有办法在我加载的类中显式加载某些字段并将其他字段保留为 NULL?我已经尝试过 DataNucleus 文档,但没有成功。

4

2 回答 2

3

您的 DTO 可能过于细化。即不打算为每个 JPA 实体设置一个 DTO。如果您必须使用 DTO,则使它们更粗粒度并手动构建它们。

最近,我们再次进行了整个“DTO 还是不 DTO,这是个问题”的讨论。对它们的要求(尤其是在 JPA 应用程序的上下文中)通常不再存在,但 DTO 的论点之一往往是视图具有更粗略的数据要求。

于 2010-02-15T15:35:55.927 回答
0

要仅加载您真正需要的数据,您需要使用自定义选择子句,该子句仅包含您将用于 DTO 的这些元素。我知道这是多么痛苦,尤其是当它涉及连接时,这就是我创建Blaze-Persistence 实体视图的原因,它将负责提高查询效率。

您将 DTO 定义为与实体的映射的接口,使用属性名称作为默认映射,这看起来非常简单,很像实体的子集,尽管它不是必须的。您可以使用任何 JPQL 表达式作为 DTO 属性的映射。

于 2018-07-19T14:06:43.250 回答