Я переношу приложение из Hibernate 4.x в Hibernate 5.3.6.У приложения есть такие запросы:
SQLQuery query = getSession().createSQLQuery("SELECT a.a, a.b, a.c FROM aTable");
Поскольку метод createSQLQuery устарел, я сначала заменил вызов метода альтернативой, предложенной в Hibernate Javadoc, а именно с помощью createNativeQuery:
NativeQuery query = getSession().createNativeQuery("SELECT a.a, a.b, a.c FROM aTable");
Проблема заключается в том, что он выдает предупреждение компилятора «NativeQuery - это необработанный тип. Ссылки на универсальный тип NativeQuery должны быть параметризованы».Кроме того, конечно, я хотел бы получить выгоду от типизированных запросов, теперь, когда они доступны.Поэтому я изменил запрос на
NativeQuery<Object[]> query = getSession().createNativeQuery("SELECT a.a, a.b, a.c FROM aTable", Object[].class);
Теперь проблема состоит в том, что выполнение запроса с помощью
List<Object[]> retList = query.list();
приводит к ошибке
javax.persistence.PersistenceException: org.hibernate.MappingException: Неизвестная сущность: [Ljava.lang.Object;
Исследование проблемы , кажется, указывает , что невозможно использовать не отображенные сущности, когдаиспользование типизированных собственных запросов (что кажется серьезным и ненужным ограничением, но я отступлю здесь).
Вопрос: есть ли способ до выполнить собственный SQL-запрос, возвращающий массив объектов с использованием Hibernate без , выдающий предупреждения компилятора пока достижение безопасности типа?Если нет, есть ли разумная альтернатива?