それでは今日は An Easier Java ORM Part 3 (
http://www.codecommit.com/blog/java/an-easier-java... を読んでみます。
この回のネタは
です。
サポート対象データベース
正式サポートはこちら。
- Derby (standalone and embedded)
- MySQL
- PostgreSQL
- Oracle (with the limitation that @AutoIncrement is only supported on primary keys)
ほとんどテストされてないけどプロバイダクラスは用意されてるよってのがこっち。
- Microsoft SQL Server (Microsoft and JTDS providers)
- HSQLDB (standalone and embedded)
ActiveObjects の利用シーンを考えると HSQLDB は結構ありそう (特に開発中) なので正式にサポートしてもらえるとうれしいですね。このへんは JSE6 になれば Derby 一色になってりするんだろうか。(OSX 版早く出てこい)
トランザクション
では続いてトランザクション。
トランザクションは net.java.ao.Transaction クラスの run を実装して定義します。Transaction#execute() は下記の処理を実行します。run メソッド内が一つのトランザクションになります。
- getConnection()
- run() の中を実行
- commit()
サンプルはこちら。
new Transaction(manager) {
public void run() {
Account david = getEntityManager().get(Account.class, 1);
david.setValue(david.getValue() - 1000);
david.save();
Account mary = getEntityManager().get(Account.class, 2);
mary.setValue(mary.getValue() + 1000);
mary.save();
}
}.execute();
ブログエントリには execute() のかわりに executeConcurrently() を実行しているサンプルもありますが、このメソッドはバージョン 0.5 にはありません。(どこで存在したか不明。ただの例かな?)
今回はここまで。