iBatisは確かにオブジェクトをレガシーデータベースシステムにマッピングするのは簡単です。
最近では、NHibernate 1.2および2.0に、iBatisを再考させる可能性のある機能セットがあります。
NHibernateは、古いデータベースで頻繁に発生する可能性のある複合キーを処理します。これらのキーは、常に快適に動作するとは限りませんが、サポートはあります。
NHibernateは、エンティティ、およびデータベースビューでのCRUD操作にストアドプロシージャを利用できます。
コレクションは、カスタムストアドプロシージャまたはSQLクエリにすることができます。外部キー関係が反対側の主キーに直接マップされていない場合、コレクションはproperty-ref属性を使用できます。
これらの機能の一部は、nhibernateのパフォーマンス/パワーを損なう可能性があります。つまり、property-refを使用した遅延読み込みは機能しません(まったく機能しませんか?)が、ほとんどの場合、これには理由があります。
その他のポイント:(これは実際にはレガシーデータベースとは関係ありませんが、テクノロジーの選択を決定するのに役立ちます)
Nhibernateコミュニティは、iBatisよりもはるかに豊富に見えます。私は両方のリストに載っていて、NHibernateのサポート量はiBatisグループと比較してかなり大きいです。したがって、サポートはより簡単になるはずです。
また、NHibernate用のcontrib/3サードパーティツールの数も増えています。いくつか例を挙げると、NHibernate Profiler、Nhibernate Query Analyzer、NHibernate Contrib、FluentNHibernateなどがあります。
おそらく、iBatisが現在持っていると信じている利点を拡張することができます。NHibernateは確かに最近非常に活発であり、多くの新機能を獲得しました。それらの多くは、レガシー/変更が難しいスキーマを支援します。
そして、質問に答えるために、はい、ひどい関係、複合キー、壊れた関係を持つレガシーデータベースでNHibernateを使用します。iBatisに基づく少量のコードもまだあります。ただし、これ以上iBatisコードを作成することはありません。