BT

NHibernateがIesi.Collectionsを削除,SQL Server 2012サポートを改善

| 作者: Roopesh Shenoy フォローする 0 人のフォロワー , 翻訳者 吉田 英人 フォローする 0 人のフォロワー 投稿日 2014年9月21日. 推定読書時間: 3 分 |

原文(投稿日:2014/08/26)へのリンク

NHibernate 4.0 GAがリリースされた。 .NET 4.0をサポートする一方で,従来のIesi.Collectionsライブラリが外されている。さらにシーケンスやクエリ結果のページングなど,SQL Server 2012機能も部分的にサポートしている。

今回のリリースには3つの大きな変更がある。その中のひとつである.NET 4.0への移行は,非互換的な変更(Breaking Change)だ。その一環として,Iesi.CollectionのISetが,マッピングクラス内で対応するBCLジェネリック型のISet<T>にリプレースされた。永続的な非ジェネリックコレクションのサポートは削除されている。このISetは,NHibernateがHibernateの.NET移植版として最初に開発された当時の,4.0以前の.NET BCL(Base Class Library)には存在していなかった。これが当初,Iesi.Collectionライブラリを採用したおもな理由のひとつだ。.NET 4.0でISet<T>インターフェースが導入されたため,このライブラリの存在が冗長になり,今回の移行となった。

NHibernateの内部的には,Isei.Collcetionsライブラリへの依存性が残っている点は注意すべきだが,大部分のユースケースにおいては,BCLの実装を使用することが可能だ。

4.0リリースのサポートに加えて,OracleのODP.NET - Managed Data Provider for .NETが新たにサポートされた。さらに,SQL Server 2012のいくつかの機能がSQL Serverダイアレクトに追加されている。

  • シーケンス - OracleとPostgresの既存サポートと同様の機能(2012以前のSQL Serverには,主キーを自動生成するためのID列はあったが,シーケンスはなかった)。
  • "IIF"機能
  • クエリページング - NH LINQのSkip()とTake()で,クエリがOFFSETとFETCHを行うことを保証する。

その他にも,マイナーな改良がいくつかある。

  • QueryOverプロジェクションでMath.Round()がサポートされるようになった。
  • SQL Serverダイアレクトでのpower()関数のサポート。
  • NHibernateUtilの静的フィールドが,NullableTypeやITypeでラップされなくなった。
  • Postgresql三角関数のサポート。
  • エンティティ名を使用した,Save/Update/SaveOrUpdateの新しいオーバーロード。
  • 多対多リレーションの可能なwhere()句。

全体として,100以上のバグフィックスとマイナーな改善があるが,そのうちのいくつかは非互換的な変更の可能性がある。変更点の完全なリストは,リリースノートあるいはNH JIRAを参照してほしい。

次は何か

4.1.0に向けた開発もすでに始まっている - NH JIRAをざっと眺めると,興味深い機能がいくつか目に留まる。

  • Oracle 12c ダイアレクトのサポート。ID列や新しいページングキーワード(FETCH FIRSTとOFFSET)の他,新しい型(VARCHAR2, NVARCHAR2, RAW)などがサポートされる。
  • PrePersistとPreUpdate属性 (同名のHibernateアノテーションに近い)。
  • WCFデータサービス用のNHibernateContext(DataContextに代わる)。
  • <join>要素でのプロパティ参照の利用。

WCFデータサービスの将来が渾沌としている現在の状況を考えると,NHibernateがWCFデータサービスをサポートするかも知れないというのは,特に興味深い(反対意見を反映して,最終的にはEF6サポートがWCFデータサービスに追加されたが)。

NHibernateはJava版のHibernateから移植された,完成度の高いオブジェクト-リレーションマッピングである。かつてはORMとして異論のない選択肢だったが,MSがサポートし,現在はオープンソースとなっているEntity Frameworkとの競合をきっかけに,将来性が不安視されている(NHibernateの支援者には,いくつか異論があるかも知れないが)。

この記事に星をつける

おすすめ度
スタイル

こんにちは

コメントするには InfoQアカウントの登録 または が必要です。InfoQ に登録するとさまざまなことができます。

アカウント登録をしてInfoQをお楽しみください。

あなたの意見をお聞かせください。

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする
コミュニティコメント

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする

ディスカッション

InfoQにログインし新機能を利用する


パスワードを忘れた方はこちらへ

Follow

お気に入りのトピックや著者をフォローする

業界やサイト内で一番重要な見出しを閲覧する

Like

より多いシグナル、より少ないノイズ

お気に入りのトピックと著者を選択して自分のフィードを作る

Notifications

最新情報をすぐ手に入れるようにしよう

通知設定をして、お気に入りコンテンツを見逃さないようにしよう!

BT