java - JpaRepository 不返回任何我的自定义查询

标签 java spring-boot jpa

我正在 IntelliJ 中使用 Spring Boot

我已经扩展了 JpaRepository 接口(interface),并创建了一个未在存储库变量中显示的查询到我的 Controller 中(我之前已经完成了,但有些东西现在不起作用,我不知道为什么)

存储库

package com.ITAcademy.dices.repositories;

import org.springframework.data.jpa.repository.JpaRepository;

import com.ITAcademy.dices.entities.Player;

    public Player findOneByOrderByrateSuccessAsc();
    public Player findOneByOrderByrateSuccessDesc();
    public List<Player> findAllByOrderAsc();
}

Controller :

package com.ITAcademy.dices.controllers;

import java.sql.Date;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.List;

import com.ITAcademy.dices.exceptions.PlayerNotFoundException;
import com.ITAcademy.dices.repositories.PlayerRepository;
import lombok.Data;
import org.springframework.dao.EmptyResultDataAccessException;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;


import com.ITAcademy.dices.entities.Player;

import javax.persistence.Entity;

@Data
@Entity
@RestController
@RequestMapping("/dices")
public class PlayerController{

    private final JpaRepository repository;

    public PlayerController(PlayerRepository repository) {
        this.repository = repository;
        Player player = new Player();
    }

    //Get all players
    @GetMapping("/players")
    public List <Player> getAllPlayers() {
        return repository.findAll();
    }

    //Create a new player               
    @PostMapping("/player")
    public Object newPlayer(@RequestBody Player newPlayer) {
        newPlayer.setDateRegister(Date.valueOf(LocalDate.now()));
        newPlayer.setRateSuccess(-1);
        if (newPlayer.getName()=="") newPlayer.setName("Anonymous");
        return repository.save(newPlayer);
    }

    //Get a player by id
    @GetMapping("/player/{idPlayer}")
    public Player getPlayer(@PathVariable Integer idPlayer) throws Throwable {
        return (Player) repository.findById(idPlayer)
                .orElseThrow(() -> new PlayerNotFoundException(idPlayer);
    }

    //Delete a player                                
    @DeleteMapping("/player/{idPlayer}")
    public void deletePlayer(@PathVariable Integer idPlayer) {
        try {
            repository.deleteById(idPlayer);
        } catch (EmptyResultDataAccessException e) {
            throw new PlayerNotFoundException(idPlayer);
        }
    } 

    //Modify a player                    
    @PutMapping("/player/{idPlayer}")
    public Player modifyPlayer(@PathVariable Integer idPlayer, @PathVariable String playerName) throws Throwable {
        Player player = new Player();
        player = (Player) repository.findById(idPlayer)
            .orElseThrow(() -> new PlayerNotFoundException(idPlayer));
        player.setName(playerName);
        return player;
    }

    //Get success average from all players              
    @GetMapping("/players/ranking")
    public double getSuccessAverage(){
        Double success = new Double;
        List<Player> players = new ArrayList<Player>();
        players = repository.findAll();
        for(int x = 0; x < players.size(); x++){
            success = success + players.get(x).getRateSuccess();
        }
        return success/players.size();
    }

    //Get player with highest success rate
    @GetMapping("/players/ranking/winner")
    public Player getWinner() {
        return this.repository.findOneByOrderByrateSuccessAsc();
    }

    //Get player with lowest success rate
    @GetMapping("/players/ranking/loser")
    public Player getLoser() {
        return this.repository.findOneByOrderByrateSuccessDesc();
    }
}

存储库方法是我编写的,因为它们不会显示在存储库点之后。

有什么建议吗? 谢谢

最佳答案

我认为您的查询方法名称错误。

我想最后一个例子应该是这样的:

public List<Player> findAllByOrderByIdAsc();

(我猜 id 是你的主键字段;))

以下是一些其他示例:https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#reference

关于java - JpaRepository 不返回任何我的自定义查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60238257/

相关文章:

java - Java中的三个分号(;)是什么意思?

spring - 将外部 application.properties 文件添加到 tomcat 中的 dockerized spring boot web 应用程序

java - 构建 CriteriaBuilder 查询来比较列表

hibernate - DataSourceTransactionManager 不持久化数据

MySQL 性能和 Memcache

Java:数组作为引用类型,在方法中

ArrayLists 的 Java 并发性(线程)。经典for和foreach的区别

java - 保存 TextField 值时出现 "java.lang.NullPointerException"- JavaFx

spring-boot - Spring Boot 加载时间编织在嵌入式 tomcat 中不起作用

spring - 是否有 Spring-boot 和 Spring-cloud 的兼容性矩阵?