是什么DTO和javax.persistence.cache.retrieveMode BYPASS之间的区别?

时间:2019-02-02 05:58:51

标签: java hibernate jpa

根据休眠文档。

DTOs返回非托管实体,assigning BYPASS to javax.persistence.cache.retrieveMode表示缓存将被忽略...

问题:吗有什么区别

2 个答案:

答案 0 :(得分:0)

Wikipedia所述,

DTO 为:

  

...携带进程之间的数据的对象

因此DTO并不是实体,因此在任何情况下都不受管理(嗯,不一定可以使用实体类作为DTO),而是仅保存数据的类。

如果只想获取数据(例如传递到某个地方),则可以直接将数据查询到DTO中。同样因为DTO是不是没有缓存,以便将数据从数据库中直接来实体。你也不能对其执行任何操作JPA

CacheRetrieveMode.BYPASS 影响EntityManager在提取实体时如何使用其缓存-因此请使用 find(..) 方法。 BYPASS将旁通从数据库从缓存中检索第一和力负荷实体总是

因此,这两个事物不能直接比较,因为它们是完全不同的事物。但我认为您所追求的是:

  • CacheRetrieveMode.BYPASS 强制EntityManager在使用find()时绕过缓存并从数据库加载实体
  • 直接用JPQL,NATIVE或某些CriteriaQuery实例化的
  • DTO 并没有使用诸如find(..)之类的EntityManagers方法,但是这些定制查询不会生成实体,因此无论设置什么,都不会缓存使用 CacheRetrieveMode

答案 1 :(得分:-1)

好的,javax.persistence.cache.retrieveMode仅适用于2级缓存,因此不能与1级缓存的DTO进行比较