【问题标题】:Spring JPA select one column doesn't workSpring JPA选择一列不起作用
【发布时间】:2017-09-29 01:41:57
【问题描述】:

我需要检索运动表中球员列的所有记录。 SportsRepository 方法如下。

@SuppressWarnings("unused")                                   
@Repository                                                              
public interface SportsRepository extends JpaRepository<Sport, Long> {   
  public static final String GET_Players="SELECT players FROM Sport"; 
  @Query(value = GET_Players, nativeQuery = true)
  public static List<String> getPlayers();                                                   
}

然后我输入“gradlew clean test”并查看。然后它会产生一个错误,说“错误:缺少方法主体,或声明抽象”。这是为什么?我们是否需要实现body。因为 JPA 查询应该给出我能理解的输出。请问有人知道吗?

【问题讨论】:

  • 你能发布你的运动类定义吗?
  • 那表示Sport的实体类知道吗? @inafalcao
  • 是的。我想查看 Sport 类的属性。
  • 也许你甚至不需要@Query,你可以用命名约定来做。

标签: mysql spring-boot jhipster


【解决方案1】:

在一个 JAVA interface 中,当你尝试定义一个静态方法时,你应该给它一个方法体,但在这里我认为你唯一应该做的就是从你的方法中删除 static

@SuppressWarnings("unused")                                   
@Repository                                                              
public interface SportsRepository extends JpaRepository<Sport, Long> {   
    public static final String GET_Players="SELECT players FROM Sport"; 
    @Query(value = GET_Players, nativeQuery = true)
    public List<String> getPlayers();                                                   
}

这里也不需要访问修饰符public,因为java在接口中定义方法时默认public

注意:我注意到你给nativeQuery分配了true,你应该确认GET_Players是sql,而不是jql。

【讨论】:

  • @M.David sql 表示表或列名来自您的实际数据库,而不是您的实体名称或实体字段名称。
  • 注意到@Forward。以上代码如何实现测试方法?
猜你喜欢
  • 2015-05-08
  • 2014-03-27
  • 1970-01-01
  • 2016-08-26
  • 2015-10-18
  • 2020-07-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多