当前位置: 首页 > 知识库问答 >
问题:

我可以在同一POJO上同时使用Spring数据JPA@Entity和Spring数据GemFire@Region吗?

章涵容
2023-03-14

当我尝试将同一个POJO用于Spring Data JPA与Spring Data GemFire的集成时,存储库总是使用POJO访问数据库。但我希望存储库能够访问来自GemFire的数据,尽管我添加了注释@enablegmFireRepositories@EnableEntityDefinedRegions

我想这是因为我在同一个POJO类中添加了@实体@区域

请帮助修复,让我知道,如果我可以这样做吗?我需要把它分成2个POJO类为数据库和GENFire工作吗?

谢谢

共有1个答案

阚乐湛
2023-03-14

不,您不需要两个单独的POJO。但是,您确实需要两个单独的存储库接口定义,一个用于JPA,另一个用于GemFire。我在这里有一个这样的实现示例,在存储库示例中。

联系人核心模块中,我有一个示例。应用程序。模型联系除其他注释(如Jackson)外,还带有JPA的@实体注释以及SDG的@区域注释的类。

然后,我在存储库示例模块中创建了两个存储库接口,一个用于JPA,它扩展了o.s.d.JPA。存储库。JpaRepository,另一个用于GemFire,它扩展了o.s.d.GemFire。存储库。GemfireRepository。还要注意的是,在我的示例中,这些存储库是由包(即example.app.repo.jpaexample.app.repo.gemfire)分隔的。

请记住,如果应用程序存储库定义(例如接触存储库)是通用的,则Spring Data强制执行严格的策略模式,以防止歧义,这意味着该接口扩展了1个常见的Spring Data接口:o.s.d.repository.存储库o.s.d.repository.CrudRepositoryo.s.d.repository.PagingAndSorting存储库,并且该接口与JPA和GMFire的“扫描”驻留在同一个包中。这对于支持存储库抽象的任何Spring Data模块都是相同的,包括但不限于MongoDB和Redis。

你的声明和意图必须非常明确。虽然通常不需要扩展特定于商店的存储库接口定义(例如o.s.d.gemfire.Repository.GemfireRepository),而是需要扩展一个通用接口(例如o.s.d.Repository.Crudepository),但绝对建议将,每个存储库定义在一个单独的包中,并相应地配置扫描。首先,这是限制扫描的好做法。

一些用户倾向于希望为他们将POJO持久化到的所有存储提供一个针对每个应用程序域模型类型的单一“可重用”存储库接口定义(例如联系人)。例如,JPA和GENFire都有一个单一的接触存储库。这是不明智的。

这是因为大多数商店都支持基本的CRUD和简单查询(例如findById(…) ),虽然不是所有的(所以要小心),但并非所有的存储在查询功能(例如联接)或功能(例如分页)上都是相同的。例如,SDG目前还不支持分页。

所以关键是,使用1个域模型类型,但每个存储定义一个存储库,并用包明确分开。然后可以相应地配置Spring数据存储库基础设施。例如,对于JPA,我有一个配置,使用ContactRepository类指向基于JPA的ContactRepository(这是类型安全的,比使用basePackages属性按名称指定包更好)。然后,我对基于GemFire的ContactRepository也做了同样的操作。

通过遵循这个配方,那么一切都很好,然后您可以将适当的存储库(按类型)注入到需要它的服务类中。例如,如果您有一个服务类需要两个存储库,那么您必须适当地注入它们。

希望这能有所帮助!

 类似资料:
  • 问题内容: 是否可以使用Spring Data JPA(由Hibernate作为JPA提供者支持)并同时直接使用Hibernate? 问题是,当我使用JpaTransactionManager时,无法使用检索当前会话。当我切换到HibernateTransaction Manager时,JPA存储库无法提交更改。 这是我的Spring上下文的一部分(在该上下文中,我无法使用直接的Hibernate

  • 是否可以使用Spring数据JPA(以Hibernate作为JPA提供程序为后盾),同时直接使用Hibernate? 问题是,当我使用JpaTransactionManager时,我无法使用检索当前会话。当我切换到HibernateTransaction管理器时,JPA存储库无法提交更改。 下面是Spring上下文的部分(对于该上下文,我无法使用直接的Hibernate调用): hibernate

  • 我试图在同一个域对象上同时使用Spring Data JPA和Spring Data Elasticsearch,但这不起作用。 https://github.com/izeye/spring-boot-throwaway-branchs/tree/data-jpa-and-elasticsearch

  • 我正在使用Spring MVC编写一个Web应用程序。 按照REST原则,我希望在应用程序中为相同的资源使用一致的URI,并使用内容协商来选择是返回HTML还是JSON。在浏览器中访问bob的个人资料页面应该会显示他的个人资料页面,使用curl获取该页面应该会给我一个JSON表示。 但是,由于语义限制(bug?)在RequestMappingHandlerMapping中,如果我在匹配的URI上定

  • 下面是我的配置:

  • 问题内容: 我的理解是,对于Spring数据JPA,我无法使用查询方法来获取列等于给定非空方法参数的所有行,而当方法参数为null时,无法使用相同的方法来获取此列为NULL的所有行。 。 那是对的吗? 因此,我必须在我的JAVA代码中对此进行区分,并且必须使用单独的查询方法明确要求空值,如下面的示例所示? 不好的是,如果我有4个可以为null的参数,并且必须编写16种不同的查询方法。 问题答案: