JPAを使用するプロジェクトならなるべくJPQLくらいで抑えるべきなのだろうが、DB固有の関数を使用しないとパフォーマンスが出ない、といった場合もあるだろう。 SQLを実行する方法は、クエリを直接与えて実行する方法と、クエリに名前を付けて呼び出す方法(NamedNativeQuery)がある。 動的にクエリを組む、といった必要が無いのであればNamedNativeQueryを使うべきだろう。 で、NamedQueryでのクエリの記述方法は次の2つある。
アノテーションを使う方法は、クエリの修正=ソースの変更になるので、DEVモードだとソース修正として検知、リロードしてくる。 簡易で便利ではあるが、クエリが複雑・多数になってくると管理が追いつかなくなる。 アノテーションによる記述(そのうち記述)# conf/jpa/orm.xml を読む jpa.default.mapping-file=jpa/orm.xml <?xml version="1.0" encoding="UTF-8"?> <entity-mappings version="2.0" xmlns="http://java.sun.com/xml/ns/persistence/orm" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence/orm http://java.sun.com/xml/ns/persistence/orm_2_0.xsd "> </entity-mappings> <entity-mappings> の要素として、<named-native-query name="hogehoge"><query>SELECT p FROM ... のように記述する。createNamedQuery(String) or createNamedQuery(String, Class<T>)でQueryオブジェクトを得る。 あとは、setParameter()メソッドで引数を設定、getResult()メソッドなどでクエリを実行して結果を得る。 例) List<User> list = JPA.createEntityManager().createNamedQuery("MyJPQLQuery", User.class) .setParameter("arg1", 10) .setParameter("arg2", 20) .getResultList(); |
playframework1 > jpa >