Model

Play 1.2.7

Model.action – Queries

Query query = JPA.em().createQuery("jpql_query");
永続化マネージャにアクセスします。

Post post = Post.findById(id);
List posts = Post.findAll();
find メソッド

post.save();
永続化層にオブジェクトを保存します。

boolean post.validateAndSave();
オブジェクトを検証して保存した場合に true を返します。検証はアノテーションで行われます。

List posts = Post.all().from(50).fetch(100);
50 番目から 100 番目のレコードを読み込みます。

Post.find("select p from Post p, Comment c where c.post
= p and c.subject like ?", "%hop%");
ジョインを使ったパラメタ化された参照

long userCount = Post.count("author=?", connectedUser);
long postCount = Post.count();
レコードをカウントします。

JPAPlugin.startTx(boolean readonly);
JPAPlugin.closeTx(boolean rollback);
トランザクションを独自で制御するメソッド

JPA.setRollbackOnly();
トランザクションを強制的にロールバックします。

Model – Basics

@Entity(name="sql_tbl") public class Post extends Model
当該クラスが永続的なものであることを指定します。

@Embedded
このフィールドが埋め込まれたものであることを定義します。

@EmbeddedId
このフィールドが当該クラスの ID であり、埋め込まれたものであることを定義します。

@Embeddable
当該クラスが他の永続的クラスに永続的に埋め込まれることを指定します。

@MappedSuperclass
このクラスがサブクラスにマッピングされるための永続的な情報を持っていることを指定します。

Model – Generators

@GeneratedValue(strategy = [NONE, TABLE, SEQUENCE,
IDENTITY, AUTO])
インデックスの自動生成に使用します。

@SequenceGenerator
永続的なエンティティに使用するデータストア内のシーケンスを使った値のジェネレータを定義します。

@TableGenerator
永続的なエンティティに使用するデータストア内のテーブルを使ったシーケンスのジェネレータを定義します。

Model – Relational mapping

@Table(name="sql_tbl", catalog="", schema="")
このクラスが保存されるテーブルを定義します。

@Id
ID となるフィールドを定義します。

@Version
バージョンを保持しているフィールドを定義します。

@Basic
永続的なフィールドを定義します。省略可能です。

@Transient
(永続的でない) 一時的なフィールドを定義します。

@Lob(fetch=[LAZY, EAGER], type=[BLOB,CLOB])
ラージオブジェクトとして保存されるフィールドを定義します。

@UniqueConstraint(primary=false, String columns[])
セカンダリインデックスを定義します。

@Temporal(DATE,TIME,TIMESTAMP)
java.util.Date や Calendar 型のフィールドにだけ使われるべきです。

@Enumerated(ORDINAL, STRING)
列挙型のクラスを保持するフィールドを定義します。

@Column(name="sql_column_name")
フィールド名と異なるテーブルのカラム名を定義します。

Model – Callbacks

データベース依存のトリガを実装する便利な方法

@PrePersist
永続化前のコールバックメソッドを定義します。

@PostPersist
永続化後のコールバックメソッドを定義します。

@PreRemove
削除前のコールバックメソッドを定義します。

@PostRemove
削除後のコールバックメソッドを定義します。

@PreUpdate
更新前のコールバックメソッドを定義します。

@PostLoad
更新後のコールバックメソッドを定義します。

Model – Relations

@OneToOne(entity, fetch=[LAZY,EAGER], nullable=true)
他の永続的なエンティティとの 1 対 1 の関連フィールドを定義します。

@OneToMany(mappedBy="remote_attribute")
他の永続的なエンティティとの 1 対 N の関連フィールドを定義します。

@ManyToMany(cascade=[ALL, PERSIST, MERGE,
REMOVE, REFRESH, DETACH])
他の永続的なエンティティとの M 対 N の関連フィールドを定義します。

@ManyToOne
他の永続的なエンティティとの N 対 1 の関連フィールドを定義します。

@JoinColumn(name = "id_connector")
テーブルか外部キーとジョインするときに使用するカラムを定義します。

@JoinTable(name = "nm_table", joinColumns =
{ @JoinColumn(name = "id_coupon", nullable = false) },
inverseJoinColumns = { @JoinColumn(name =
"id_campaign", nullable = false) })
ManyToMany の関連をマッピングするために使用します。

Model – JPA Queries

@NamedQuery(name="q1", "jpql_query");
永続化単位で使用される名前付き JPQL クエリを定義します。

@NamedNativeQuery(name="q2","sql_query")
永続化単位で使用されるネイティブな SQL クエリを定義します。

@SqlResultSetMapping
ネイティブな SQL クエリの実行結果をオブジェクトモデルにマッピングするために使用します。

これは JPA2 アノテーションのサブセットに過ぎません。Hibernate もまた非標準のセットを持っています。