DTO和javax.persistence.cache.retrieveMode旁路之间的区别是什么?
根据hibernate文档 返回非托管实体,表示缓存将被忽略 问题:有什么区别?DTO如前所述: 。。。在进程之间传送数据的对象 所以DTO不是一个实体,所以在任何情况下都不受管理(当然,不一定可以使用实体类作为DTO),而是一个只保存数据的类 如果您只想获得数据(例如,传递到某处),则可以直接将数据查询到DTO中。同样,因为DTO不是一个实体,所以它不会被缓存,所以数据直接来自数据库。您都不能对其执行任何JPA操作 CacheRetrieveMode.BYPASS影响EntityManager在获取实体时如何使用其缓存-因此使用DTO和javax.persistence.cache.retrieveMode旁路之间的区别是什么?,java,hibernate,jpa,Java,Hibernate,Jpa,根据hibernate文档 返回非托管实体,表示缓存将被忽略 问题:有什么区别?DTO如前所述: 。。。在进程之间传送数据的对象 所以DTO不是一个实体,所以在任何情况下都不受管理(当然,不一定可以使用实体类作为DTO),而是一个只保存数据的类 如果您只想获得数据(例如,传递到某处),则可以直接将数据查询到DTO中。同样,因为DTO不是一个实体,所以它不会被缓存,所以数据直接来自数据库。您都不能对其执行任何JPA操作 CacheRetrieveMode.BYPASS影响EntityManager
查找(…)
方法。旁路将首先绕过从缓存进行搜索,并强制始终从数据库加载实体
所以这两个东西不能直接比较,因为它们是完全不同的东西。但我认为你所追求的不同之处在于:
- CacheRetrieveMode.BYPASS在使用
find()
- DTOs当直接使用JPQL实例化时,本机或某些CriteriaQuery不使用EntityManager方法,如
,但这些定制查询不会生成实体,因此无论使用CacheRetrieveMode设置了什么,都不会缓存find(…)