我正在使用JPA在基于Java EE的Web应用程序中加载和保留实体。Hibernate用作JPA的实现,但是我不使用特定于Hibernate的功能,而只能使用纯JPA。
这是一些DAO类的notice getOrders方法:
getOrders
类OrderDao { EntityManager em; 列出getOrders(Long customerId){ 查询q = em.createQuery( “ _从订单中选择o在哪里o.customerId =:customerId_ ”); q.setParameter(“ _customerId_ ”,customerId); **返回** q.getResultList(); } }
方法很简单,但是有很大的缺点。每次调用该方法时,都会在JPA实现中的某处执行以下操作:
我认为上述步骤1和步骤2应该在每个应用程序生命周期内执行一次。但是如何做到呢?换句话说,我需要缓存查询实例。
当然,我可以在我这边实现这样的缓存。但是,等等,我正在使用现代功能强大的ORM!他们不是已经为我做了这个吗?
注意,我没有提到像Hibernate查询缓存这样的缓存查询结果的东西。在这里,我想更快地执行查询。
是Hibernate中的查询计划缓存。因此,不会在每次调用DAO时都对HQL进行解析(因此,在您的应用程序生命周期中,#1实际上仅发生一次)。它是QueryPlanCache。它没有大量记录,因为它“有效”。但是您可以在此处找到更多信息。