Весенние данные. получить пользовательские значения выберите (не сущность)
У меня есть этот запрос
String query = "select ig.p1,
ig.p2,
ig.p3,
tg.p4
from mytable ig, mytable2 tg
where ..... and ....";
И у меня есть DTO
public class MyDto{
//constructor
private String p1;
private String p2;
private String p3;
private String p4;
...
//getters/setters
}
Мне нужно получить этот выбор и сопоставление с DTO.
Я создаю это в моем DTO
@SqlResultSetMapping(
name="findReport",
classes={
@ConstructorResult(
targetClass=MyDto.class,
columns={
@ColumnResult(name="p1",type = String.class),
@ColumnResult(name="p2", type = String.class),
@ColumnResult(name="p3", type = String.class),
@ColumnResult(name="p4", type = String.class),
}
)
}
)
И создать DAO/Repository
@Component
public class ReportRepositoryImpl implements ReportRepository {
@PersistenceContext
private EntityManager em;
@Override
public Report findReportSelect() {
Query query = em.createNativeQuery(
"query","findReport");
@SuppressWarnings("unchecked")
Collection<MyDto> dto = query.getResultList();
Iterable<MyDto> itr = dto;
return (MyDto)itr;
}
}
Но у меня ошибка unchecked
Мои цитаты 1. Как я могу исправить эту ошибку и что эта ошибка означает? 2. Есть ли более простой способ получить этот результат?
1 ответ
Непроверенное предупреждение, потому что query.getResultList()
возвращает нетипизированный Collection
вместо Collection<MyDto>
, Если вы позвоните одному из EntityManager
методы, которые возвращают TypedQuery<T>
вместо Query
это очистит это предупреждение. Этот SO ответ имеет несколько хороших рекомендаций по использованию @NamedNativeQuery
с EntityManager.createNamedQuery(name, class)
чтобы сделать это.