従業員とプロジェクトの 2 つのエンティティ (テーブル) があります。従業員は複数のプロジェクトを持つことができます。Project テーブルの CREATOR_ID フィールドは、Employee テーブルの ID フィールドを参照します。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);
しかし、次のようなエラーが表示されます。
そのような場合に正しい JOIN 構文を提案できる人はいますか? 私が使用する("SELECT * FROM EMPLOYEE_TAB E, ........")
と、他のエラーが発生します:
java.lang.ClassCastException: [Ljava.lang.Object; com.im.server.dto.EmployeeDTO にキャストできません
.
前もって感謝します。