gpt4 book ai didi

java - Hibernate 中 DTO 和延迟加载之间有什么关系

转载 作者:行者123 更新时间:2023-12-05 09:14:51 24 4
gpt4 key购买 nike

我知道什么是DTO:为了减少方法调用次数,在进程间携带数据的对象。我知道什么是 hibernate 中的延迟加载。

我在《Full Stack Development with JHipster》一书中读到这句话:JHipster 在服务器端使用 DTO(数据传输对象)和 VM( View 模型)。 DTO 用于在服务层和资源层之间传输数据。它们打破了 Hibernate 事务并避免了进一步延迟加载被资源层触发。

我不明白DTO和延迟加载之间的关系。

最佳答案

延迟加载适用于实体,而非 DTO。

JPA 实体可以表示为 POJO 或 Proxy .

使用 EntityManager.find 给你一个 POJO:

Post post = entityManager.find(Post.class, postId);

虽然 EtityManager.getReference 方法为您提供了一个代理:

Post post = entityManager.getReference(Post.class, postId);

POJO 已初始化其基本属性,因为执行了 SELECT 语句以获取实体。代理在创建时不会访问数据库。只有 id 是根据提供的实体标识符设置的。只有您访问代理属性,才会执行 SELECT 语句。

代理也用于默认使用 FetchType.LAZY 策略的集合(例如 @OneToMany@ManyToMany)。访问 LAZY 集合后,将执行 SELECT 语句以获取关联的集合。

现在,DTO 基于投影,因此在填充 DTO 之前执行 SELECT 语句。为此,您可以说每次都急切加载 DTO。

DTO 比只读投影的实体更有效,因为您只加载您明确请求的表列。

关于java - Hibernate 中 DTO 和延迟加载之间有什么关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53429410/

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