Spring Boot 在記憶體中具有 DB H2。它有表格和以下資料:-
[
{
"id": 1,
"firstName": "Lokesh",
"lastName": "Gupta",
"email": "[email protected]"
},
{
"id": 2,
"firstName": "John",
"lastName": "Doe",
"email": "[email protected]"
}
]
這是我的帶有自定義 jpa 查詢的存盤庫:-
@Repository
public interface EmployeeRepository extends JpaRepository<EmployeeEntity, Long> {
@Query("SELECT e FROM EmployeeEntity e WHERE e.firstName like firstName")
List<EmployeeEntity> findByFirstName(@Param("firstName") String firstName);
@Query("SELECT e FROM EmployeeEntity e WHERE e.id = id")
EmployeeEntity findById2(@Param("id") long id);
}
服務有以下兩種方法:-
public EmployeeEntity getEmployeeById2(Long id) {
EmployeeEntity employee = repository.findById2(id);
return employee;
}
public List<EmployeeEntity> findByFirstName(String firstName){
List<EmployeeEntity> employeeEntities = repository.findByFirstName(firstName);
return employeeEntities;
}
控制器有這個:-
@GetMapping("/{id}")
public ResponseEntity<EmployeeEntity> getEmployeeById(@PathVariable("id") Long id)
throws RecordNotFoundException {
EmployeeEntity entity = service.getEmployeeById2(id);
return new ResponseEntity<EmployeeEntity>(entity, new HttpHeaders(), HttpStatus.OK);
}
@GetMapping(value = "/fname/{firstName}")
public List<EmployeeEntity> findByFirstName(@PathVariable("firstName") String firstName){
return service.findByFirstName(firstName);
}
當我呼叫 findByFirstName 時。我得到了兩個EmployeeEntity。
當我呼叫 getEmployeeById 時。我有錯誤:-
“狀態”:500,“錯誤”:“內部服務器錯誤”,“訊息”:“查詢沒有回傳唯一結果:2;嵌套例外是javax.persistence.NonUniqueResultException:查詢沒有回傳唯一結果:2” ,
我不知道如何正確撰寫 jap 自定義查詢以回傳正確的結果。我如何通過名字僅獲得 1 名員工或僅通過其 ID 獲得 1 名員工?
uj5u.com熱心網友回復:
不測驗你的代碼,嘗試使用它,
@Repository
public interface EmployeeRepository extends JpaRepository<EmployeeEntity, Long> {
@Query("SELECT e FROM EmployeeEntity e WHERE e.firstName like :firstName")
List<EmployeeEntity> findByFirstName(@Param("firstName") String firstName);
@Query("SELECT e FROM EmployeeEntity e WHERE e.id = :id")
EmployeeEntity findById2(@Param("id") long id);
}
我:在您的 JPQL 變數之前添加了一個字符。
uj5u.com熱心網友回復:
查詢中的命名引數缺少冒號。它應該是:
@Query("SELECT e FROM EmployeeEntity e WHERE e.firstName like :firstName")
List<EmployeeEntity> findByFirstName(@Param("firstName") String firstName);
@Query("SELECT e FROM EmployeeEntity e WHERE e.id = :id")
EmployeeEntity findById2(@Param("id") long id);
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/373299.html
