在STS 3.1中的Spring Data JpaRepository接口中获取"无效的派生查询"错误

ske*_*625 22 spring spring-mvc sts-springsourcetoolsuite spring-data spring-data-jpa

我们完全按照Spring Data文档中的说明实现了我们的存储库.一切都很好,直到我们从STS 2.9升级到STS 3.1.所有使这些错误消失的尝试都失败了,在某些情况下它们甚至没有意义!它们与界面或使用的实体中的任何属性都不匹配!

这是一个例子:

public interface CreditNotesRepository extends JpaRepository<CreditNotes, Long> {

    CreditNotes findCurrentCreditNotes(Long shipmentDetailId);
}
Run Code Online (Sandbox Code Playgroud)

findCurrentCreditNotes是我们实体中的命名查询.这段代码执行得很好.

@NamedQueries({
    @NamedQuery(name = "CreditNotes.getCount", query = "SELECT COUNT(f) FROM CreditNotes f"),
    @NamedQuery(name = "CreditNotes.findCurrentCreditNotes", query =
        "SELECT creditNotes FROM CreditNotes creditNotes"
        + " WHERE creditNotes.shipmentDetail.shipmentDetailId = ?1 "
        + " AND creditNotes.notesSeqNumber =  (SELECT max(creditNotes2.notesSeqNumber) FROM CreditNotes creditNotes2"
        + " WHERE creditNotes.shipmentDetail.shipmentDetailId = creditNotes2.shipmentDetail.shipmentDetailId)")
})
Run Code Online (Sandbox Code Playgroud)

我们得到的错误:

Invalid derived query! No property find found for type ca.cole.freight.model.CreditNotes
Run Code Online (Sandbox Code Playgroud)

虽然这只是一个标志(不影响编译),但令人讨厌并且令人困惑.任何人都可以对此有所了解吗?并向我解释,就像我6岁!;)

Tua*_*uan 31

在春季论坛的帖子上,Spring Team宣布了这一点

它已经针对STS 3.3.0进行了修复

我还没有检查这个版本.但我正在使用3.5.0.RELEASE,问题又回来了!我的修复是取消选中无效派生查询

无效的派生查询

  • 也出现在STS 3.6.3.RELEASE中 (3认同)
  • 该问题仍然存在于STS 3.9.1中. (3认同)
  • 而且仍然在3.7 (2认同)

Gru*_*art 26

这是以下帖子中解释的IDE错误:

http://forum.springsource.org/showthread.php?138585-Invalid-derived-query!-No-property-delete-found-for-type-java-lang-Object

在此期间,您可以关闭首选项/ spring/project验证器中的验证/数据验证器 取消选中无效的派生查询,STS将不再抛出标记.


Paw*_*ęba 13

还有解决方法.@Query在您的存储库中的方法定义中添加注释,而不定义JPQL/SQL查询.

这是一个例子:

@Query
List<OwnerModel> findByFirstNameAndAgeNotZero(@Param(value = "firstName") String firstName);
Run Code Online (Sandbox Code Playgroud)

在这种情况下,OrderModel.findByFirstNameAndAgeNotZero将使用命名查询.您的Eclipse错误Invalid derived query也应该消失,而不需要像@Tuan Dang所描述的那样禁用验证

检查Eclipse 4.5.1并安装了Spring插件@NamedQuery@NamedNativeQuery.