У меня есть пользовательский SQL-запрос в Hibernate (3.5.2), в котором я хочу вернуть сопоставленный объект и связанный (объединенный) объект. Однако Hibernate, похоже, дает мне список массивов, а не список объектов.
Чтобы немного упростить мою ситуацию: -
Entity1 содержит внешний ключ Entity2, а сопоставленные объекты настроены так, что Entity1 имеет свойство объекта, ссылающееся на Entity2. Я хочу получить список объектов Entity1, но с уже инициализированной ссылкой на объект (чтобы связанный объект был загружен).
Теперь я могу сделать это с помощью специального SQL-запроса, например:
final SQLQuery qry = hibernateSession.createSQLQuery(
"select {entity1.*}, {entity2.*} from entity1 inner join entity2 on entity1.fk = entity2.id ");
qry.setReadOnly(true);
qry.addEntity("entity1", Entity1.class);
qry.addJoin("entity2", "entity1.entity2");
List list = qry.list(); // Returns list of arrays!!
Это работает, поскольку все объекты Entity1 правильно инициализируются. Однако список, который я возвращаю, НЕ является простым списком объектов Entity1. Это фактически список массивов, где каждый массив содержит 2 элемента - Entity1 и Entity2. Я предполагаю, что это потому, что я поставил две записи псевдонимов в предложение SELECT.
Если я удалю второй псевдоним (для Entity2), я просто получаю ошибки "столбец не найден" - предположительно потому, что Hibernate не может найти поля для инициализации объекта entity2.
Любые идеи? У меня есть запрос, который может возвращать поля для основного и связанного объекта, но я хочу, чтобы List возвращался только как список объектов Entity1.
Упреждающий комментарий: Да, я знаю, что я мог бы переструктурировать это и сделать запрос по-другому (критерии API и т.д.). Но это то, что я застрял в данный момент. В этой конкретной ситуации меня сдерживают некоторые другие факторы, поэтому я надеялся, что есть какой-то способ сообщить Hibernate, что я хочу!
Спасибо.