【问题标题】:Springboot JPA @Query Rest Giving PersistentEntity must not be nullSpring Boot JPA @Query Rest Giving Persistence Entity 不能为空
【发布时间】:2017-06-01 00:27:14
【问题描述】:

我正在尝试与springboot 1.4.3 组合一个简单的休息服务。我使用findByRecid 之类的简单查询启动并运行它,但是当我尝试对同一实体执行@Query 语句时,我收到以下错误消息

{"cause":null,"message":"PersistentEntity 不能为空!"}

此外,如果我在查询中为实体使用完全限定名称,Intellij 会告诉我该类不是实体,即使它标有 @Entity 并适用于标准 springboot 查询。如果可能,请提供帮助 - 我已经尝试解决这个问题好几天了。以下是供您参考的查询

@Query("SELECT new com.test.domain.ReceivableBeans.RecAgeBucketGroupAmountSum(r.agebucket, sum(r.amount)) from com.test.domain.Receivable as r GROUP BY r.agebucket")
    List<com.test.domain.ReceivableBeans.RecAgeBucketGroupAmountSum> recByAgeBucket();

【问题讨论】:

  • 您不再查询应收账款,而是获取组聚合的结果。让您的方法返回一个具有“agebucket”和“amount”属性的实体。
  • 谢谢cafelatte。尝试过,然后得到以下错误。“在结果元组中找不到别名!确保您的查询定义了别名!;嵌套异常是 java.lang.IllegalStateException:在结果元组中找不到别名!”另一件奇怪的事情是,当我使用 Receivable 的完全限定名称时,Intellij 告诉我该类不是实体,即使它被标记为 @Entity
  • 嗨,尼尔,还有其他想法吗?我已经让它与具有年龄桶和数量属性的新类一起使用,但不幸的是仍然得到相同的 PersistentEntity 不能为空问题。

标签: spring-boot spring-data-jpa jpql


【解决方案1】:

试试:

@Query("select new ReceivableStats(r.agebucket, sum(r.amount)) from Receivable r group by r.agebucket")
List< ReceivableStats> recByAgeBucket();

或在查询中命名您的别名,例如

sum(r.amount) as amount

并让您的方法返回一个 Object[]。

【讨论】:

  • 不幸的是没有工作。如果我不包含完全限定名称,我会在 intellij 中得到“无法解析符号”下划线,并且无法运行该服务。但是,将限定名称放入作品中,但不幸的是,我遇到了与以前相同的错误 {"cause":null,"message":"PersistentEntity must not be null!"}
  • 在@Query 语句中提到时,为什么存储库不会将我的实体类视为实体?
  • 有人对此有什么想法吗?
  • 是否有机会看到更多代码/一个可重现的小示例?
  • 只要我总是返回一个 Receivable 对象,我实际上已经让它工作了。当我停止返回包含所有应收账款列的应收账款时,我收到同样的错误 - “持久实体不能为空”。没有其他代码可以真正显示,因为 SpringBoot 除了存储库和查询之外不需要任何东西。你知道在我返回的只是年龄桶和总金额列的情况下让这个工作的方法吗?我尝试了一个自定义类,尝试了 Object[],并尝试返回 List>,但没有任何效果。这是 SpringBoot 的限制吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-03-02
  • 2017-04-01
  • 2021-08-28
  • 2019-01-25
  • 2020-05-09
  • 2020-10-14
  • 2017-11-29
相关资源
最近更新 更多