基于关键字的JPA查询,状态为Enum,并带有NOT子句[Kotlin]

基于关键字的JPA查询,状态为Enum,并带有NOT子句[Kotlin],kotlin,spring-data-jpa,Kotlin,Spring Data Jpa,我需要修改一个基于关键字的JPA查询,以便排除具有特定状态的记录。目前,我有以下几点: findAllByLatestVersion_Entity_DataFieldGreaterThanEqualAndLatestVersion_AnotherFieldNull(datefield: Istant, pageable: Pageable) 我不想参数化,因此我想让查询工作,因为有一个WHERE子句声明状态不是C,例如。我正在努力寻找关于如何进行的清晰文档。有没有可能写下这样的话: findA

我需要修改一个基于关键字的JPA查询,以便排除具有特定状态的记录。目前,我有以下几点:

findAllByLatestVersion_Entity_DataFieldGreaterThanEqualAndLatestVersion_AnotherFieldNull(datefield: Istant, pageable: Pageable)
我不想参数化,因此我想让查询工作,因为有一个WHERE子句声明状态不是C,例如。我正在努力寻找关于如何进行的清晰文档。有没有可能写下这样的话:

findAllByLatestVersion_Entity_DataFieldGreaterThanEqualAndLatestVersion_AnotherFieldNullAndLatestVersion_StatusCNot(datefield: Istant, pageable: Pageable)

谢谢你

不,这在查询派生中是不可能的,即你在这里使用的功能。即使有可能,你也不应该这么做。 查询派生适用于简单查询,其中您无论如何都会选择的存储库方法的名称完美地表达了生成查询所需了解的所有信息。 它不打算取代JPQL或SQL。 当得到的方法名不是一个好的方法名时,永远不要使用它


因此,只需将查询表述为JPQL查询,并使用
@query
注释来指定它。

否这在查询派生(即您在此处使用的功能)中是不可能的。即使有可能,你也不应该这么做。 查询派生适用于简单查询,其中您无论如何都会选择的存储库方法的名称完美地表达了生成查询所需了解的所有信息。 它不打算取代JPQL或SQL。 当得到的方法名不是一个好的方法名时,永远不要使用它


因此,只需将查询表述为JPQL查询,并使用
@query
注释来指定它。

是,我得出了同样的结论,我也被这样一个事实所困扰,即这样的关键字查询往往有很长的方法名,从长远来看,很难维护,而且对于新开发人员了解代码库也是一种痛苦。是的,我得出了同样的结论,而且我也被这样一个事实所困扰,即这样的关键字查询往往有很长的方法名,从长远来看很难维护,而且对于新开发人员了解代码库也是一件痛苦的事情。