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

我可以有一个JPA存储库接口使用Spring Data JPA处理多个实体类吗?

郗亦
2023-03-14

我对Spring Data JPA不太感兴趣,在Spring Boot项目中我遇到了以下问题。

对于如何正确处理这种情况,我有以下架构上的疑问:

我有一个由这样的接口实现的存储库,我在其中定义了我的“查询方法”:

public interface ExcelRepository extends CrudRepository<Country, Integer> {

    public List<Country> findAllByOrderByCountryNameAsc();

    public List<BlockAttackDetail> findAllByOrderByAttackTypeAcronymAsc();
}

如您所见,我正在扩展Crudepository接口,并指定了一个名为**Country*的模型类,映射数据库中的特定表。

添加了第二个方法,用于映射不同的数据库表的另一个实体类(BlockattackDetail)。

因此,启动我的应用程序,我得到这个错误,因为这个存储库仅用于由国家实体类映射的数据库表:

Caused by: org.springframework.data.mapping.PropertyReferenceException: No property attackTypeAcronym found for type Country!

我的问题是:我是否需要创建多个JPA存储库接口(每个实体一个),或者是否有一种方法可以让一个JPA存储库接口在多个实体类上工作?

在我的具体情况下,我将有几个方法与特定的数据库表(与实体)交互,我担心有一个单一的存储库接口处理多个实体类(以避免混淆)。

我能用某种方式做到吗?如果我能从体系结构的角度来理解它,或者最好为每个实体类提供一个特定的JPA存储库接口?

共有1个答案

况弘新
2023-03-14

根据Spring Data留档,每个实体应该有一个存储库

https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#repositories.definition

在您的情况下,完成工作的唯一方法是使用Spring Data JPA:

public interface CountryRepository extends CrudRepository<Country, Integer> {

   public List<Country> findAllByOrderByCountryNameAsc();
}

public interface BlockAttackDetailRepository extends CrudRepository<BlockAttackDetail, Integer> {

   public List<BlockAttackDetail> findAllByOrderByAttackTypeAcronymAsc();
}
 类似资料:
  • 我有几个实体,并使用Spring Data JPA存储库与规范查询我的数据库。因此,我创建了一个泛型类< code>SpecBuilder来基于查询描述(< code>MyQueryDescriptor)构建我的查询。 我的存储库: 和 现在有三件事我不太确定:< br> 1) 使用泛型SpecBuilder是一个干净的设计吗? 2) 有没有办法避免为每个实体编写这些存储库接口?假设一个通用存储库

  • 问题内容: 我最近设法将几个手动创建的作业转换为DSL脚本(内联为临时的“种子”作业),并且感到惊讶的是它如此简单。现在,我想摆脱 多个 种子工作,并尝试更整洁地构建事物。 为此,我创建了一个新的存储库,并将所有Groovy DSL脚本提交给它。然后,我创建了一个Jenkins作业,该作业从存储库中提取,并且只有一个 Process Job DSLs 步骤。此步骤已选中 “在文件系统 上 查找”

  • 问题内容: 一个类文件可以实现几个接口?类文件使用的接口数量是否有限制?提前致谢。 问题答案: 出于所有实际目的,一个类可以实现的接口数量没有限制,但是java不允许您从多个超类继承。 但是,如果您确实想要nitpick,则可以说一个类可以实现的接口数量受接口ID可以以java字节码表示的最大值限制,或者必须由实现这些接口的代码存储量来限制,或者存储字节码的硬盘空间量。这些都是愚蠢的论点。显然,由

  • 我是JPA的新手,有一个关于如何处理实体的问题。在我的例子中,我有3个实体:用户、组和事件。 一个事件总是属于一个组。这意味着有一个OneToMulti-Relation。一个用户可以订阅多个组,这意味着有一个ManyToMulti-Relation。现在我遇到麻烦的部分。一个用户也可以订阅多个事件,这意味着也有一个ManyToMulti-Relation。 现在我的问题是。我如何在我的组实体中列

  • 我的应用程序有250多个表,每个表都有ID和name列。我正在尝试用Hibernate5+将我们的应用程序从Hibernate3迁移到Spring-JPA4.3。 在当前的hibernate层中,我有(选项1): 因此,如何在一个JPA存储库中执行以下操作:

  • 我有3个字段的实体:id,lastname和PhoneNumber。我想创建一个方法,用于更新所有字段,或者只更新一个或两个字段。 我使用Hibernate和JPA存储库。当我尝试更新所有字段时,一切都运行良好,但例如,当我想只更新lastname而不更改phoneNumber时,我在output中输入了旧phoneNumber的null。 我正在寻找解决方案,我添加了@DynamicUpdate