Scala + Wicket にあう ORM を探す
面白みがないので JPA はとりあえずおいときます。Doma がお気に入りなので、Doma が念頭にあったりします。それを踏まえて Scala + Wicket にあう ORM を探しています。文中でいう「エンティティ」とはレコードと紐づくクラスのことです。
Squeryl
Wicket で利用するなら直列化に関する仕組みがしっかりできていないといけません。Squeryl その点でポロポロ問題がでました。以前もとりあげましたが、まず、エンティティに定義している serialVersionUID がなぜか永続化対象になってしまいます。これはバグでしょう。それから、エンティティのフィールドにカスタム型(ユーザ定義型)が使えるのですが、そのカスタム型が必ず継承しなければならないクラスが Serializable ではないのでカスタム型を使用したエンティティは直列化できなくなってしまいます。
結論としては現時点では Squeryl は Wicket との相性は悪いです。ただ、以下の ORM に比べると、エンティティをイミュータブルにできたり、フィールドの型に Option 型を使用することができるなどとても Scala 的です。今後に期待しています。
Circumflex ORM
Circumflex という Web アプリケーション・フレームワークがあるのですが、その ORM を単独で使うことができます。ドキュメントが少なく、トランザクション管理のやり方を見つけるまでずいぶん苦労しました。「やりすぎ」と評される DSL っぷりですが、その分、直感的な使い方ができたりもします。おそらく必要になったときに DB セッションが始まるという仕組みになっていて、リクエストサイクルリスナでコミットやロールバックしてあげればどこでセッションがどれだけ使われるかわからないような Wicket にはうってつけの仕組みだと思います。
Squeryl のようにエンティティをイミュータブルにすることはできなさそうです。また、デフォルトで対応している型が少ないのもネックで BINARY(byte 配列)型にも対応していません。