У меня есть две сущности (таблицы) - сотрудник и проект.Сотрудник может иметь несколько проектов.Поле CREATOR_ID таблицы проекта ссылается на поле идентификатора таблицы Employee.Сущность Employee не поддерживает никаких ссылок на Project, но сущность Project имеет ссылку на Employee.
При использовании EntityManager следующий запрос работает нормально -
entityManager.createQuery(
"select e from EmployeeDTO e, ProjectDTO p"
+ " where p.id = ?1 and p.creator.id=e.id");
Но так как у меня есть связь LAZYЯ получаю сообщение об ошибке:
Не удалось инициализировать прокси-сервер - нет сеанса
, если я пытаюсь получить доступ к информации о проекте из сущности Employee.Это ожидаемо, поэтому я использую сеанс Hibernate для создания запроса, как показано ниже.
Session session = HibernateUtil.getSessionFactory().openSession();
org.hibernate.Query q = session.createSQLQuery(
"SELECT E FROM EMPLOYEE_TAB E, PROJECT_TAB P WHERE P.ID = "
+ projectId + " AND P.CREATOR_ID = E.ID")
.addEntity("EmployeeDTO ", EmployeeDTO.class)
.addEntity("ProjectDTO", ProjectDTO.class);
Но я получаю сообщение об ошибке: «Столбец« E »либо отсутствует в какой-либо таблице в списке FROM, либо отображается вспецификация соединения и выходит за рамки спецификации соединения ... "
Кто-нибудь может подсказать, какой будет правильный синтаксис JOIN для такого случая?Если я использую ("SELECT * FROM EMPLOYEE_TAB E, ........")
- это выдает другую ошибку:
java.lang.ClassCastException: [Ljava.lang.Object;невозможно преобразовать в com.im.server.dto.EmployeeDTO
.
Заранее спасибо.