【问题标题】:Could any one tell me the reason of spring-data projection warning in this query?谁能告诉我这个查询中出现弹簧数据投影警告的原因?
【发布时间】:2017-10-12 13:55:59
【问题描述】:

我有以下疑问:

@Query("select c.status from Component c where c.id = ?1")
ComponentStatus findStatusByComponentId(ComponentId id);

为什么IntelliJ 向我发出警告:此处应为“组件”域类型或有效的投影接口?

谁能帮帮我?

【问题讨论】:

  • 更新:当我将查询名称更改为“xfindStatusByBundleId”时,警告消失。为什么?
  • 这对我来说似乎是一个错误

标签: java spring jpa intellij-idea spring-data-jpa


【解决方案1】:

任何采用“find.*By.+”(例如“find<DOMAIN_TYPE>By<PROJECTION_INTERFACE>”或“findBy<PROJECTION_INTERFACE>”)形式的 Spring 数据存储库方法如果与有效的派生查询不匹配,都会发出警告。如果您开始输入“find”并等待自动完成对话框,它会建议一些派生查询方法(或至少是它们的开头)。

如果您继续输入有效的域类型(在我的例子中是 RequestSampleTest),自动完成框将继续更新,提供更多可能性(有很多可能的派生查询,具体取决于实体)。

这篇文章 (https://www.baeldung.com/spring-data-derived-queries) 很好地介绍了 Spring 数据派生查询。它们基本上是执行基本搜索和排序查询的一种简化方式。

作为评论的注释:通过在方法名称前添加“x”,它不再“看起来像”派生查询,因此警告消失了。

另外请注意:我认为只有 IntelliJ Pro 版提供 Spring 支持,所以如果您没有看到这些下拉菜单,可能是因为您使用的是 Community Edition。

【讨论】:

    【解决方案2】:

    可能是因为它违背了 Spring Data 所期望的模式。您可以像这样进行查询(某事):

    ComponentStatus findStatusById(ComponentId id);
    

    您不需要编写查询。

    【讨论】:

    • 我按照你的建议做了,没有用,警告仍然存在:/
    猜你喜欢
    • 2017-10-23
    • 2020-09-06
    • 1970-01-01
    • 1970-01-01
    • 2018-05-15
    • 1970-01-01
    • 2013-05-08
    • 2011-09-03
    • 1970-01-01
    相关资源
    最近更新 更多