【问题标题】:Spring boot repository for read-only data: @Query annotation type not applicable to this kind of declaration只读数据的 Spring Boot 存储库:@Query 注释类型不适用于此类声明
【发布时间】:2020-10-01 14:45:24
【问题描述】:

我正在尝试创建一个基本存储库,以便获得 Postgres 支持的我所在地区的时区。我收到错误“注释类型不适用于这种声明”。 我应该如何处理这个?为什么我不允许在这里定义查询?

import com.me.model.PgTz;
import org.springframework.data.jpa.repository.Query;
import org.springframework.stereotype.Repository;
@Repository
public interface TzRepository extends org.springframework.data.repository.Repository<PgTz,String>
{
    @Query("SELECT tz FROM PgTz tz WHERE tz.name STARTSWITH 'US/' OR tz.name STARTSWITH 'America/'");
    Iterable<PgTz> findPgTzByName(); 
}

【问题讨论】:

  • 能否也包括您的导入?
  • 完成。感谢收看。

标签: java spring postgresql spring-boot jpa


【解决方案1】:

问题是由于@Query() 声明后的分号在 java 中是非法的。删除它应该可以修复编译。

@Query("SELECT tz FROM PgTz i WHERE i.name STARTSWITH('US/') OR i.name STARTSWITH('America/')")
Iterable<PgTz> findPgTzByName(); 

Annotations Basics

【讨论】:

  • 谢谢,成功了。我真的很怀念在办公室工作,同事会马上发现的。你不会碰巧知道为什么 STARTING_WITH、StartingWith、IsStartingWith 或 StartsWith 会产生语法错误?我不得不使用 LIKE,但出于个人喜好,我尽量不使用它。
  • @RickDeBay 默认情况下@Query() 使用JQPL 来解释查询,它没有startwith 功能。您可以将@Query('SELECT...', nativeQuery = true) 设置为直接使用本机SQL,但AFAIK PostgresQL 也没有startwith 功能。如果您使用 HIbernate 作为 JPA 提供程序,您可以按照the answer 中的说明注册自定义函数。但我个人认为这不值得。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-08-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-31
  • 2013-10-14
  • 2021-09-18
相关资源
最近更新 更多