[英]Why jpa custom query returns more results
Spring 引導在 memory DB H2 中。 它有表格和以下數據: -
[
{
"id": 1,
"firstName": "Lokesh",
"lastName": "Gupta",
"email": "howtodoinjava@gmail.com"
},
{
"id": 2,
"firstName": "John",
"lastName": "Doe",
"email": "xyz@email.com"
}
]
這是我的存儲庫,帶有自定義 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;
}
Controller 有這個:-
@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 名員工?
在不測試您的代碼的情況下,嘗試使用它,
@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 變量之前添加了一個字符:
查詢中的命名參數缺少冒號。 它應該是:
@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);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.