因此,我正在做一个分配,其中有2个实体-User
and Car
分别具有OneToMany关系。
因此,User
将拥有Cars
的列表。
我需要实现一个控制器方法,该方法将显示用户通过UserId(这是Car实体的外键)拥有的所有汽车
方法是:[GET] - /users/{id}/cars
现在,如果我只是简单地删除所有用户,那么我将得到原始的JSON smth:
{
"id":"1",
"name":"Taavet Prulskih",
"cars":[{
"Id":"1",
"make":"BMW",
"model":"760",
"numberplate":"123FFF"
},
{
"Id":"2",
"make":"Opel",
"model":"Astra",
"numberplate":"789BFX"
}]
}
但是我不想拥有有关User的数据,因为没有必要,因为我已经在get请求中指定了我要选择某个用户。因此,我不想只拥有某些用户拥有的汽车列表。
我正在寻找的JSON输出是:
{
"Id":"1",
"make":"BMW",
"model":"760",
"numberplate":"123FFF"
},
{
"Id":"2",
"make":"Opel",
"model":"Astra",
"numberplate":"789BFX"
}
ATM上有一个CarRepository,它通过以下方法扩展了JpaRepository:
@Query(value = "SELECT * FROM Cars c where c.id = :id", nativeQuery = true)
Optional<Car> findByUserId(@Param("id") Long id);
但是由于某种原因,我收到了“ java.util.NoSuchElementException:无值”异常。尝试使用findByUserId查询方法时。
无效的控制器部分:
@GetMapping("/users/{id}/cars")
public ResponseEntity<Car> getAllCarsByUserId(@PathVariable("id") Long id)
{
return ResponseEntity.ok(carRepository.findByUserId(id).get());
}
存储库:
public interface CarRepository extends JpaRepository<Car, Long> {
@Query(value = "SELECT * FROM Cars c where c.user_id = :id", nativeQuery = true)
List<Car> findByUserId(@Param("id") Long id);
}
您能帮助我解决这个问题吗?
提前谢谢! :)
答案 0 :(得分:0)
以下是我对您要查找的内容的理解:
存储库
@Repository
public interface CarRepository extends JpaRepository<Car, Long> {
@Query(value = "SELECT * FROM T_CARS c where c.USER_ID = :id", nativeQuery = true)
Collection<Car> findByUserId(@Param("id") Long id);
}
控制器
class UserController {
@Autowired
private CarRepository carRepository;
@GetMapping("/users/{id}/cars")
public ResponseEntity<Collection<Car>> getAllCarsByUserId(@PathVariable("id") Long id) {
return ResponseEntity.ok(carRepository.findByUserId(id));
}
}
我希望它对您有用:)