この日記は私的なものであり所属会社の見解とは無関係です。 GitHub: takahashikzn

JPA

boolean型のフィールドでorder byできない

JPA

JPAの仕様では、自然順序が存在する型(int, String, Date...)のフィールドのみがorder byで使用できます。 だから、例えばboolean型フィールドでorder byして「false、true」の順番に並べる、ということができません。これって結構困ると思うのだが… 残念な…

関連テーブルを含めたSELECTクエリの書き方

JPA

例えば、次のようなデータ構造があるとします。 Javaのソースは次のような感じ。 @Entity public class Shop { //主キー @Id private long id; //取扱商品 @ManyToMany(fetch = FetchType.LAZY) @JoinTable(name = "HandleProduct", joinColumns = @JoinColu…

@ManyToManyと@JoinTableを使ってuni-directionalにFetch Joinする

『店舗』と『商品』の間にN:Nの関係があったとします。 スキーマは次のような感じ。 -- 店舗 create table Shop ( id bigint primary key, ... ); -- 商品 create table Product ( id bigint primary key, ... ); -- 店舗がどの商品を扱うかの関連を表す (As…

EclipseLinkとSpring2.5でLazy Loading

拙作R42FWではEclipseLinkとSpring2.5を組み合わせて使用していますが、 この組み合わせで、JPAのLazy Loadingが動作させることができたので、その手順を紹介します。 EclipseLink単品で使用する場合の手順では動かない まず最初にこちらに書いてある手順で…

サブクエリーでORDER BYは使えない

JPA

JPQLにおけるサブクエリーの定義は次の通りです。見ての通り、ORDER BYは使えません。 subquery ::= simple_select_clause subquery_from_clause [where_clause] [groupby_clause] [having_clause] でも、LIMITと組み合わせてトップ10とかを抽出したい場合は…

IN句とMEMBER OF句の違い

JPA

IN句 パラメータはリテラルまたはサブクエリーを指定可能。 OK SELECT f FROM Foo AS f WHERE f.id IN (1, 2, 3) SELECT f FROM Foo AS f WHERE f.id IN (SELECT b.id FROM Bar AS b WHERE ...) NG SELECT f FROM Foo AS f, Bar AS b WHERE f.id IN b.foos M…

fetch joinの結果をフィルタする

JPA

例えば次のような1:Nのモデルがあったとします。 エンティティクラスは次のような感じですかね。 @Entity public class Shop { @Id private long id; private String shopName; @OneToMany private Set<Employee> employees; ... } @Entity public class Employee { @I</employee>…

生成された主キーを取得する

JPA

JPAを使ってエンティティをINSERTし、更にINSERTしたエンティティの主キーを取得する必要があったとします。 例えば次のようなコードを考えてみます。 @Entity public class Foo { // AUTO INCREMENTなカラムIDを主キーとしている @Id @GeneratedValue(strat…