Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java持久性API-重写/扩展Hibernate(或类似)EntityManager_Hibernate_Jpa_Entitymanager_Hibernate Entitymanager - Fatal编程技术网

Java持久性API-重写/扩展Hibernate(或类似)EntityManager

Java持久性API-重写/扩展Hibernate(或类似)EntityManager,hibernate,jpa,entitymanager,hibernate-entitymanager,Hibernate,Jpa,Entitymanager,Hibernate Entitymanager,我目前正在使用hibernate的JPA实现成功地将对象持久化到datasouce。现在,我想覆盖hibernate对EntityManager的实现,特别是createQuery函数。因此,在构建持久性上下文时,将使用定制的EntityManager 这可能吗?如果是,我将如何进行 非常感谢 编辑: 我想实现我自己的缓存。(注意:我已经回顾了Hibernate的二级缓存,主要缺点是“缓存永远不会知道另一个应用程序对持久性存储所做的更改”,所以我选择了反对它) 我的缓存将包含来自数据源的最近使用

我目前正在使用hibernate的JPA实现成功地将对象持久化到datasouce。现在,我想覆盖hibernate对EntityManager的实现,特别是createQuery函数。因此,在构建持久性上下文时,将使用定制的EntityManager

这可能吗?如果是,我将如何进行

非常感谢

编辑:

我想实现我自己的缓存。(注意:我已经回顾了Hibernate的二级缓存,主要缺点是“缓存永远不会知道另一个应用程序对持久性存储所做的更改”,所以我选择了反对它)

我的缓存将包含来自数据源的最近使用的数据。由于客户机通过EntityManager请求数据,因此我将覆盖/扩展该属性,以便首先检查缓存。如果未命中,则EntityManager将正常运行

编辑2:

或者,我可以从org.hibernate.ejb扩展QueryImpl。这将允许我将getResultList()和getSingleResult()的功能更改为以下内容:

  • 检查外部缓存中的数据
  • 如果找到,返回结果
  • 否则,调用基类QueryImpl.getResultList(或QueryImpl.getSingleResult())

  • 你能详细说明你需要做什么吗?Hibernate提供了许多定制选项,而不必覆盖EM。原始帖子已经过编辑。您想要实现的行为是任何缓存的正常行为。只需使用任何现有的二级缓存实现,它们都将按照您所描述的方式运行。我不使用现有二级缓存的主要原因是,我可以在外部构建自己的缓存,这样就可以处理来自其他应用程序的更新,而无需定期终止数据。与Hibernate的二级缓存一样:“缓存永远不会知道另一个应用程序对持久性存储所做的更改”。