Псевдоним для столбцов в запросе jpql

1

Я работаю в проекте Restful с Spring Jpa, поэтому я использую аннотацию @Query. Мне было интересно, как я могу задать псевдонимы для столбцов в моем запросе? потому что ответ отображает каждый регистр resulset как массив 0,1,2 вместо этого, я хочу отобразить настраиваемое имя, которое я хочу установить с псевдонимом.

здесь некоторый код

DaoGameI.java

public interface DaoGameI extends JpaRepository<Game, Integer> {

    @Query("SELECT g.id AS id_game, g.scoreHomeTeam As score_home_team, g.date AS game_date" 
           " FROM Game g "
          )
    public List<Game> allGames();

}

ServiceGame.java

@Autowired
    private DaoJuegoI iGames;

    @RequestMapping(value="/all")
    public @ResponseBody List<Game> all(){
        return iGame.allGames();
    }

то я получаю этот ответ..

Изображение 174551

вместо OI нужно отображать id_game. вместо 1 я хочу отобразить score_home_team. вместо 2 Я хочу показать дату

Надеюсь, кто-нибудь может мне помочь!

  • 1
    Используемый вами запрос заставляет JPA возвращать коллекцию массивов, поэтому вам нужно преобразовать его в нужную форму, если это необходимо. Почему вы не выбираете данный экземпляр вместо выбранных атрибутов, а конвертируете экземпляры Game в JSON?
  • 0
    Потому что для этого случая мне нужно несколько атрибутов, и я думаю, что есть способ преобразовать их в экземпляры Json ... спасибо за ваш ответ @Chris
Теги:
spring
jpa

1 ответ

3

Один из способов добиться этого - определить новый объект, содержащий эти три параметра:

    public class GameResponse{

        private Long id_game;

        private Long score_home_team;

        private Date game_date;

        //All getters and setters
        //Add a  default Constructor
        //And another parameterized constructor
        public GameResponse(Long id, Long score, Date date){
            this.id_game = id;
            this.score_home_team = score;
            this.game_date = date;
        } 
    }

Теперь измените свой sql @Query как -

 @Query("SELECT NEW GameResponse(g.id, g.scoreHomeTeam, g.date) FROM Game g")
 public List<Game> allGames();

Это решает вашу проблему.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню