dto 自定义 repo jpa 对象返回

问题描述 投票:0回答:1

这实际上可能是一个简单的问题,但我想学习解决这个问题的一般方法。

我使用 spring boot 并定义 dto 来获取我的 User 对象并将其作为响应返回。我可以用

Object[]
拿到它,但我也想拿到钥匙。

我的 dto:

public class LeaderboardDto {
    private Long userId;
    private Long matchId;
    private Long score;
    private String country;
    private Long tournamentId;
}

我的实体:

public class Leaderboard {
    @Id
    @GeneratedValue(strategy = GenerationType.UUID)
    private java.util.UUID id;
    private Long userId;
    private Long matchId;
    private Long score;
    private String country;
    private Long tournamentId;
}

我的自定义查询存储库:

@Query(value = "SELECT new LeaderboardDto(l.userId, l.matchId, l.score, l.country, l.tournamentId) leaderboard l FROM Leaderboard WHERE tournamentId = ?1 AND matchId = ?2") 
List<LeaderboardDto> getGroupLeaderboardWithId(long tourId, long matchId);

我的暗示:

@Override
public List<LeaderboardDto> getGroupLeaderboard(long tourid, long matchid){
    return tournamentRepository.getGroupLeaderboardWithId(tourid, matchid);
    //return "hi";
}

问题是,我将所有

LeaderboardDto
转换为
Object[]
并从 sql 中删除 New(),语句(只需选择左侧)它工作正常。但我得到这样的输出:

[val], [val], [val], [val]

但是我也想用键值进行响应,我相信我可以通过分配给我的自定义对象来实现这一点(返回类型 LeaderboardDto,我不想选择 uuid)。

但是上面的那个我得到了这样的错误

UnsatisfiedDependencyException: Error creating bean with name 'tournamentController' defined in file [Unsatisfied dependency expressed through constructor parameter 0: Error creating bean with name 'tournamentServiceImpl' defined in file : Unsatisfied dependency expressed through constructor parameter 0: Error creating bean with name 'tournamentRepository' defined
JpaRepositoriesRegistrar.EnableJpaRepositoriesConfiguration: Could not create query for public abstract java.util.List 

Reason: Validation failed for query for method public abstract java

我怎样才能用我的语法实现,请帮忙?

甚至查询中的表名也是区分大小写的。

java jpa dto
1个回答
0
投票

@Query("从排行榜 l WHERE l.tournamentId = ?1 AND 中选择新地图(l.userId 作为 userId、l.matchId 作为 matchId、l.score 作为分数、l.country 作为国家、l.tournamentId 作为锦标赛 ID) l.matchId = ?2") 列表> getGroupLeaderboardWithId(长tourId, 长matchId);

由于您希望响应是 k-v 对,您可以将代码更改为上面的代码并将其作为地图对象获取

© www.soinside.com 2019 - 2024. All rights reserved.