簡體   English   中英

Hibernate本機查詢方法

[英]Hibernate native query method

因此,我正在做一個分配,其中有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);

}

您能幫助我解決這個問題嗎?

先感謝您! :)

這是我對您要尋找的內容的理解:

知識庫

@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));
  }

}

我希望它對您有用:)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM