質問

提案された注文のリストを返すメソッドがあります。ユーザーがnullを渡すと、その基準は無視されます。

public IList<SuggestedOrderItem> GetSuggestedOrderItemByCriteria
        (
            int? itemNumber,
            int? deptNumber            
        )
    {
        try
        {
            NHibernate.ICriteria criteria = NHibernateSession.CreateCriteria(typeof(Core.SuggestedOrderItem));

            if (itemNumber.HasValue)
                criteria.CreateCriteria("Item", "Item").Add(Expression.Eq("Item.ItemNumber", itemNumber.Value));

            if (deptNumber.HasValue)
                criteria.CreateCriteria("Item.Department", "Department").Add(Expression.Eq("Department.DepartmentNumber", deptNumber.Value));

            return criteria.List<Core.SuggestedOrderItem>();
        }
        catch (NHibernate.HibernateException he)
        {
            DataAccessException dae = new DataAccessException("NHibernate Exception", he);
            throw dae;                
        }

    }

基準を指定すると、すべてが正常に機能します。罰金とは、正しい提案された注文を取得し、すべてのバージョン番号が異なることを意味します。すべての基準がnullの場合、推奨されるすべての注文を取得しますが、バージョン番号はすべて同じです。別の開発者がUIで作業しており、上記のメソッドを呼び出して、ユーザーが変更する注文を選択できるようにすべての注文を画面に入力しています。バージョン番号がオブジェクトの実際のバージョンと一致しないため、私はそれを拒否していますが、彼の更新要求を受け取ったとき。これは、マッピングファイルでバージョン列がどのように見えるかです。

<version name="Version" type="Int64" generated="always" column="ORA_ROWSCN" access="property" unsaved-value="0"/>

ご協力いただきありがとうございます!

更新:

nhprofをダウンロードして、それぞれの場合に生成されるSQLクエリが異なるかどうかを確認しました。基準をまったく渡さない場合でも、基準を指定する場合でも、where句を除いてまったく同じです。 dbエディターで各クエリを実行すると、サービスで見たのと同じ結果が得られました。これはある種の奇妙なオラクルの問題ですか? where句を含めると、異なるora_rowscn番号が取得されます。それ以外はすべて同じです。

役に立ちましたか?

解決

ANSI Sqlを使用すると、何らかの問題が発生することが判明しました(Oracle 10gデータベースを使用しています)。次のプロパティをapp.configに追加して、ANSIを使用しないようにnhibernateを取得しようとしました。

<property name="use_outer_join">false</property>

ただし、これは役に立ちませんでした。次に追加しました:

<property name="max_fetch_depth">0</property>

DBヒットが増えましたが、バージョン番号は予想どおりに戻っています。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top