NHibernate 2.0は、Ayende Rahien氏によって一般利用が発表されて(リンク)、公に知られるようになった。発表は、アルファとリリース候補版の数ヵ月後に行われ、現時点ではHibernate 3.2の機能と適合する。
NHibernate 2.0で使用できる機能については、InfoQに2008年4月に投稿された「NHibernate 2.0 の新機能」(参考記事)というタイトルの記事の中でHartmut Wilms氏が解説している。この記事は、2.0に含まれる機能の詳細を具体的に説明している。Rahien氏のブログに掲載された機能の詳細を一部抜粋する。:
- 新機能:
- 1つのクラスを複数のテーブルにマップするための結合マッピングエレメントの追加
テーブルおよび継承ストラテジー - PostgreSQL方言のHQL関数'current_timestamp'、'str'および'locate'
- VetoInterceptor - IInterceptorインターフェイスを介したDelete、Update、Insertへのキャンセルコール
- HQL の select 句での制約の使用
- Nhibernateへの[サブクラスごとのテーブル、ディスクリミネータの使用]サポートの追加
- サブクエリでのページングのサポートの追加
- カスタムSQLクエリでのタイプの自動検出
- OnPreLoad&OnPostLoadライフサイクルイベントの追加
- ThreadStaticSessionContextの追加
- ~へのタグの追加
- 親がnot-found="ignore"であるため、foreign-key="none"を追加(SQL Serverには関連しない)
- DetachedQuery の追加
- ネイティブSQLクエリでのExecuteUpdateサポート
- Hibernateから:
- アクション、イベントおよびリスナーを移植
- StatelessSessionを移植
- CacheModeを移植
- Statisticsを移植
- QueryPlanを移植
- ResultSetWrapperを移植
- 階層/非構造化キャッシュを移植
- SchemaUpdateを移植
- Hibernate.UserTypesを移植
- Hibernate.Mappingを移植
- Hibernate.Typeを移植
- EntityKeyを移植
- CollectionKeyを移植
- TypedValueを移植
- SQLExceptionConverterを移植
- セッションコンテキストを移植
- CascadingActionを移植
- 画期的変更:
- NHibernate.CriterionへのNHibernate.Expressionネームスペースの変更
- NHiberante.PropertiesヘのNHiberante.Propertyネームスペースの変更
- トランザクション外のAutoFlushの廃止 – データーベーストランザクションはオプションではなく、データベースとのすべての通信は、データの読み書きに関わらず、トランザクション内部で行われなければならない。
セクションは、セクションを使用して無視される(2つのセクションは異なるXML形式であることに注意)。 - 構成値の接頭辞"hibernate."の廃止。"hibernate.dialect"を指定していない場合は、"dialect"とだけ指定すればよい。
- Hibernate 3.2 Interceptorに適合するための IInterceptorの変更 – インターフェイスの変更
- 初期化時にすべての名前付きクエリの検証を実行し、無効なクエリを投げる。
- NHibernateがSQL Serverのcount(*)クエリにlongを返す。
- SaveOrUpdateCopyがオリジナルを変更することなく、エンティティの新しいインスタンスを返す。
- INamingStrategyインターフェイスの変更
- NHibernate.Search - AttributesネームスペースへのIndex/Store属性の移動
- Itype、IentityPersister、IVersionTypeへの変更 - Nhibernateで無謀な操作をしたユーザにのみ関連がある。
-
- IBatcherインターフェイスの変更
- 修正されたバグ:
- 式を伴うマップのHQLクエリに関するバグの修正
- クエリの内部にクエリがあり、その内部にさらにクエリがある場合の例外の修正
- SQLを使用したクエリサイズの制限をサポートしていない方言に対して、複数の基準がページングをサポートしていない。
- 複数のプロセッサを持つマシンで不正にソートされる MsSql2005 方言の制限文字列に関する問題の修正
- 別のsubexpression内でSimpleSubqueryExpressionを使用したときにNullReferenceExceptionを取得する問題の修正
- 内部にホールのあるクエリを削除したときのNull Reference Exceptionの修正
- 類似したテーブルの複雑な結合での重複したカラム名の修正
- すべてのクエリでパラメータの使用を強制するMultiQueryの修正
- パラメータにカンマが含まれている場合、およびMaxResultsを使用した場合のconcat関数の失敗の修正
- MSSQL 2005方言でページングを使用した式の失敗の修正
- PersistentEnumTypeがenum型でゼロ値が定義されたと不正に想定する問題の修正
- SetFirstResult()が使用されていない場合に、SetMaxResults()が1行少ない行を返す問題の修正
- 一括オーダーする場合のSQL Server 2005 のGetLimitString内のバグの修正
- SessionImpl.EnableFilterがすでに使用可能となっているフィルタを誤って返す問題の修正
- 生成されたIdがMySQLで動作しない問題の修正
- one-to-oneの遅延が許されない問題の修正
- ペシミスティックロッキングでFOR UPDATEステートメントが生成されない問題の修正
- 改善点:
- Postgre方言へのGuidサポートの追加
- クエリ内のコメントのサポートの追加
- ISessionへのMergeおよびPersistの追加
- SQL ServerヘのIFFのサポート
- IdBagでIdentityカラムの処理が可能になった。
- 複数の基準でResult Transformerが使用されるようになった。
- key-many-to-one && not-foundの処理
- マッピングでクラスを抽象化するように指定できるようになった。
- ガイダンス:
- Criteria クエリの定義には Expression クラスのかわりに Restrictions を使用することが望ましい。
- 子プロジェクト:
- NHibernate.Validatorの追加
- NHibernate.Shardsの追加
- Hibernate Search 3.0に適合するためのNHibernate.Searchの更新
- Criteria API:
- ICriteriaおよびDetachedCriteriaのInspection、Traversal、CloningおよびTransformationが可能
- CriteriaTransformerクラスの導入
- GetCriteriaByPath、GetCriteriaByAlias
- DetachedCriteria.Forの追加
- Multi Criteriaの追加
- Projectionsは、生成したSQLステートメントにパラメータを渡せるようになった。
- Projections(Criteria)からのSql関数(HQLの概念)の呼出しのサポートの追加
- ConstantProjectionの追加
- CastProjectionの追加
- IcriterionへのパラメータとしてのIProjectionの使用が可能になった。
- ICriteriaおよびDetachedCriteriaのInspection、Traversal、CloningおよびTransformationが可能
- プロキシの検証機能の向上:
- 内部フィールドのチェックもサポート
- .NET 2.0 SP1のサポート向上のためのCastle.DynamicProxy2.dllの更新
- SQL Lite:
- マルチクエリおよびマルチ基準のサポート
- subselectおよびlimitのサポート
- DROP TABLE IF EXISTSセマンティックの使用が可能
- PostgreSQL (Npgsql):
- PostgreSQLのMulti Queryサポートの実現
- FireBird:
- 全体的なサポートの大幅な向上
- Batching:
- 1つのバッチでデータベースにすべてのコマンドが送信されることがより明確になるようにロギングを変更
- SQLが準備される前にユーザがSQLをインターセプトして変更できるように、AbstractBatcherでInterceptorを使用するようになった。
- エラー処理:
- Int32Typeで値を取得する場合の例外のエラーメッセージを改善
- 存在しないプロパティへの参照を含むサブクエリを使用する場合のエラーメッセージを改善
- value型を含むUniqueResult()を呼び出す場合、およびクエリがNullを返す場合に投げられる例外の内容を充実.
- 全体的なエラー処理の向上
- ログのデバッグの改善
- リファクタリング:
- 非ジェネリック型ではなくジェネリックコレクションを使用する内部の主要なリファクタリング
- 構成とhbmファイルの解析への主要なリファクタリング
- Factories:
- ProxyFactoryFactoryの追加
- Added BatchingBatcherFactoryの追加
NHibernateへのLINQは2.0リリースには含まれていないが、2.1に組み込まれる予定なので、注意する必要がある。また、.NET 1.1は現在ではサポートされていない。
Googleグループ(リンク)がサポートの問題に対応する。NHiberateは現在、SourceForgeからダウンロードできる(リンク)。
原文はこちらです:http://www.infoq.com/news/2008/08/nhibernate2-arrived