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

具有收集结果的spring数据jpa@EntityGraph方法引发BeanCreationException

蒋奇
2023-03-14

嵌套异常为org。springframework。豆子。工厂BeanCreationException:创建名为“cityDao”的bean时出错:调用init方法失败;嵌套异常为java。lang.IllegalArgumentException:未能为方法公共抽象java创建查询。util。列出com。服务器存储库。地方城市大道。findAllWithCountry()!找不到类型City的属性findAllWithCountry!

@Transactional
public interface CityDao extends JpaRepository<City, Integer> {
    @EntityGraph(attributePaths = "country")
    List<City> findAllWithCountry(); //this one does not work

    @EntityGraph(attributePaths = "country")
    City findOneWithCountryById(int id); //this one works
}

实体:

@Entity
@Table(name = "city", uniqueConstraints = {
        @UniqueConstraint(columnNames = {"country", "city_name", "latitude", "longitude"})
})
@Data
public class City {
    @ManyToOne(fetch = FetchType.LAZY)
    @NotNull
    @JoinColumn(name = "country")
    private Country country;
}

我正在尝试实现EntityGraph以提高API性能。第一个方法在第二个方法工作时抛出BeanCreationException。唯一的区别是第一个返回集合,第二个返回单个实体。有没有办法解决这个问题?

共有1个答案

云项禹
2023-03-14

关键问题不是城市的country属性,请查看stacktrace:

No property findAllWithCountry found for type City!

这意味着它根本无法派生查询,更不用说找到Country属性了。

您可以覆盖默认的findAll:

@EntityGraph(attributePaths = "country")
@Override
List<City> findAll();

这将对您的所有findAll应用此优化。

当我在过去遇到这种情况时(我希望有多个具有相同查询属性的派生方法,但每个都有不同的注释),就是编写自定义基repo或使用query编写查询。

 类似资料:
  • (使用Spring Data JPA)我有两个实体和,它们之间具有一个或多个或多个双向关系。我将添加到父实体,如下所示: 请注意,父级子级的fetch类型是lazy的。这是故意的。当我询问个别家长时,我不想总是急切地加载孩子。通常情况下,我可以使用我的命名实体图来按需加载孩子们。但是..... 有一个特定的情况,我想查询一个或多个家长和迫切加载他们的孩子。除此之外,我还需要能够以编程方式构建这个查

  • Contact实体定义了与两个MySQL表中存在的email和nickname类型的实体集合的关系。 我的问题是返回的结果集有重复的电子邮件和昵称。 当重复发生时,Hibernate正在运行以下操作。 问候你,伊恩。

  • 我有一个Spring批处理应用程序,需要从4个表中进行选择。问题是,我无法使用关系,将编写Enricher来选择完整数据。 目前我有几个问题: 是否可以以简单的方式从JpaRepository映射非实体(POJO)。我看到了的示例。我正在寻找自动映射(也许是JPA,而不是Spring Data)。我可以用结果精确地制作列名,但它不起作用。 将POJO标记为实体没问题,但有问题。实体需要。这对我来说

  • 我正在为以下问题而苦苦挣扎:我有一个返回Future[Result]的方法,其中Result是我想用specs2中的数据表行检查的东西。 据我所知,以下代码每次都会阻塞并等待结果可用。 通常,我想异步进行所有调用,然后使用Future.sequence将Seq[Future[Result]]转换为Future[Seq[Result]],然后运行测试。 有什么合理的方法可以做到这一点吗?

  • 问题内容: 阅读以下代码: 以下代码未显示实际总数: 我的jTable在jTable中显示4条记录,但总数= 0; 当我通过调试评估时,它显示: 而不是total =(int)4如果我使用 然后合计显示准确值= 4,但rSet不返回任何值。然后jTable为空。告诉我! 问题答案: BalusC的答案是正确的!但是我不得不根据用户实例变量来提一下,例如: 然后你失踪了 其余代码相同,您将获得所需的

  • 问题内容: 我必须在Hibernate,Jpa的应用程序(弹簧)中使用两个不同的数据库。我想直接将不同的表定义为不同的数据源。所以我使用两个不同的持久性单元,然后尝试使用 和 将不同的表放入不同的包中。但这不起作用。用第一个数据源来影响所有表。然后我尝试将诸如类的名称写入持久性XML文件 和it.two.app.domain.second.OtherTable 但是,当我运行Log时,说表’fir