我收到以下錯誤:
IllegalArgumentException: Mismatch in requested result type [com.taqwaapps.entity.Event] and actual result type [com.taqwaapps.dto.EventDTO]
但我的代碼指向我打算接收的型別:
@Repository
public class EventRepositoryImpl {
@PersistenceContext
private EntityManager entityManager;
public List<EventDTO> getLatestEventsFiltered(String sql, int limit) {
Query query = entityManager.createQuery(sql, Event.class);
query.setMaxResults(limit);
List<EventDTO> resultList = (List<EventDTO>) query.getResultList();
return resultList;
}
}
資訊:物件Event和EventDTO是不同的。
任何想法?
uj5u.com熱心網友回復:
Query query = entityManager.createQuery(sql, Event.class); <---- 在這里你通知庫它必須使用決議結果Event.class
但是在這里List<EventDTO> resultList = (List<EventDTO>) query.getResultList();你嘗試使用決議結果EventDTO.class
把它改成
List<Event> resultList = query.getResultList();
然后使用一些轉換器將其轉換List<Event>為List<EventDTO>
uj5u.com熱心網友回復:
在修復代碼之前,您必須清楚 java.lang.IllegalArgumentException 的原因。參考
java.lang.IllegalArgumentException 的原因
- 當引數超出范圍時。例如,百分比應介于 1 到 100 之間。如果用戶輸入 101,則會拋出 IllegalArugmentExcpetion。
- 當引數格式無效時。例如,如果我們的方法需要像 YYYY/MM/DD 這樣的日期格式,但如果用戶傳遞的是 YYYY-MM-DD。那么我們的方法無法理解,就會拋出 IllegalArugmentExcpetion。
- 當方法需要非空字串作為引數但傳遞空字串時。
一旦你清楚了這些問題,請參考@Panagiotis Bougioukas已經提供的解決方案
問題 - 引數格式無效
最有可能下面的解決方案應該作業(未測驗)
@Repository
public class EventRepositoryImpl {
@PersistenceContext
private EntityManager entityManager;
public List<EventDTO> getLatestEventsFiltered(String sql, int limit) {
var query = entityManager.createQuery(sql, Event.class);
query.setMaxResults(limit);
var resultList = query.getResultList().
stream().map(this::convertToDto).
collect(Collectors.toList());
return resultList;
}
private EventDTO convertToDto(Event event) {
var dto = new EventDTO();
// convert event to eventdto here
return dto;
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/452760.html
上一篇:存盤庫查詢中的Spring運算式語言(SpEL)訪問語言環境
下一篇:模型中的Java反射集列舉
