SimpleORM4Jでは、Criteria APIでは表現できない複雑なクエリや、各リレーショナルデータベース独自の仕様を使ったSQLを実行する為のインターフェイスを用意しています。
■ EntityManager#createRawQueryシグネチャ public Query createRawQuery(String sql, Class> entityClass)
第1引数 | SQL文(RAWクエリ) |
---|---|
第2引数 |
マッピングクラス(このクラスにSQL実行結果がマッピングされます) ※ Map.classを指定するとHashMapにマッピングされます。 |
RAWクエリ(生SQL)の実装例を以下に記載をします。
Oracle Database固有の「ヒント句」を使用した実装例です。
また、SimpleORM4JのCriteria APIでは実現できない「サブクエリ」を使用しています。
■ 実装例1 try { EntityManager em = EntityManagerFactory.createEntityManager(); String sql = " SELECT " + " /*+ INDEX(DM PK_MST_DEPARTMENT) */ " + " DM.ID, DM.NAME " + " FROM " + " MST_DEPARTMENT DM " + " INNER JOIN " + " (SELECT " + " MAX(MST_DEPARTMENT.ID) AS MAX_ID " + " FROM " + " MST_DEPARTMENT " + " GROUP BY " + " MST_DEPARTMENT.SCHOOL_ID) DM_MAX " + " ON " + " DM_MAX.MAX_ID = DM.ID "; Query query = em.createRawQuery(sql, Department.class); List<Department> resultList = (List<Department>) query.getResultList(); System.out.println(EntityResultViewHelper.generateTableView(resultList)); } catch (Exception e) { e.printStackTrace(); }
Oracle Databaseでのみ正常に実行できる更新文です。
SQLの実行は更新系クエリですので、Query#executeUpdateメソッドを使用します。
■ 実装例2 try { EntityManager em = EntityManagerFactory.createEntityManager(); String sql = " UPDATE " + " (SELECT " + " MST_CHARGE.NAME " + " FROM " + " MST_CHARGE " + " WHERE " + " MST_CHARGE.ID = 4) C " + " SET C.NAME = '担当者D:更新RAWクエリ' "; Query query = em.createRawQuery(sql, null); int updCnt = query.executeUpdate(); System.out.println("Update count : " + updCnt); } catch (Exception e) { e.printStackTrace(); }
SimpleORM4Jへのご意見やご感想がございましたら、メッセージをお願い致します。
また、SimpleORM4Jを使用して頂きまして、バグがございましたらご連絡を頂けると助かります。
皆様からのご意見・ご感想をもとに、SimpleORM4Jを改善・拡張をしていきたいと考えております。
皆様からのメッセージは当方で確認をしておりますが、仕事をしながらの開発となる為、すぐにご返信・対応をすることが
出来ない場合がございます。何卒ご容赦ください。
タイトル※ | |
---|---|
メールアドレス | |
内容※ |