如何解决JPA Repository 按自定义字段搜索
我正在尝试获取具有相同字段的对象列表。
我有一个名为 Song 的模型,包含以下字段:名称、流派、艺术家和 ID。
我在网上阅读了有关如何在存储库中实现该方法的信息,并像这样添加了它:
@Repository public interface ISongRepository extends JpaRepository<Song,Long>{
@Query("SELECT s.name FROM Song s WHERE s.genre = ?1")
Song findByGenre(String genre);
}
现在我想用我在控制器中创建的端点检索对象。但是我在网上找不到我需要如何正确编写这个方法。
我尝试使用与 get by id 相同的格式,但这不起作用,自定义方法是否有不同的格式?
@GetMapping(value = "/{id}")
@ResponseBody
public ResponseEntity getSongById(@PathVariable("id") Long id) {
Optional<Song> song = songRepository.findById(id);
if(song.isEmpty()) {
return ResponseEntity.badRequest().body(song);
}
return ResponseEntity.ok(song.get());
}
@GetMapping(value = "/genre/{genre}")
@ResponseBody
public ResponseEntity getSongByGenre(@PathVariable("genre") String songGenre){
List<Song> song = song.(songRepository.findByGenre(songGenre));
if(song.isEmpty()){
return ResponseEntity.badRequest().body(song);
}
return ResponseEntity.ok(song.get());
}
}
解决方法
尝试在 @Param
处添加 ISongRepository
并将返回类型 findByGenre
方法更改为 List<Song>
,还要确保您从其余控制器中检索 id
或 genre
@Repository public interface ISongRepository extends JpaRepository<Song,Long>{
@Query("SELECT s FROM Song s WHERE s.genre =:genre")
List<Song> findByGenre(@Param("genre") String genre);
}
,
我在控制器中将方法更改为此:
@GetMapping("/genre/{genre}")
public ResponseEntity getAllSongsGenre(@PathVariable("genre") String genre){
List<Song> song;
if(genre != null){
song = songRepository.findByGenre(genre);
if(song.isEmpty()){
return ResponseEntity.badRequest().body(song);
}
return ResponseEntity.ok(song);
}
song = songRepository.findAll();
return ResponseEntity.ok(song);
}
在 JPARepository 中:
List<Song> findByGenre(String genre);
输出是这样的(在邮递员中):
{
"songName": "Someday","songArtist": "Kygo","songGenre": "House","songId": 1
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。