問題タブ [queryover]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
nhibernate - NHibernateLinqのFetchManyに相当するNHibernate3.0QueryOver
Nhibernate 3のlinqプロバイダーは、FetchMany、ThenFetchManyなどを使用してコレクションの複数レベルの熱心なフェッチを指定する機能を提供します。QueryOverを使用してこれを行う同等の方法はありますか。
私が構造を持っていると言う
NHLinqでツリー全体を熱心にロードできます
QueryOver APIを使用してこれを行う方法はありますか?
nhibernate - nhibernate queryover でこれを行う方法
nhibernate QueryOver でこれを行う必要があります。
これまでのところ、私はこれを行ってきました:
しかし、これはすべてを選択し( Select )、 Command オブジェクトのみが必要です( select sc.)。次のようにクエリにプロジェクションを追加しようとすると:
次の例外がスローされます。
x Source=NHibernate
StackTrace: at NHibernate.Impl.ExpressionProcessor.FindMemberExpression(Expression expression) in d:\CSharp\NH\nhibernate\src\NHibernate\Impl\ExpressionProcessor.cs:line 189 at NHibernate.Criterion.QueryOver2.Select(Expression
1[] プロジェクション) in d:\CSharp\NH\nhibernate\src\NHibernate\Criterion\QueryOver.cs:C:\Projects\EGrad の Novatec.Persistence.Repositories.Implementations.UserRepository.GetAllowedUserCommands(Int32 userId) の 363 行目\Main\Source\Novatec.E-Grad\Source\Novatec.Persistence\Repositories\Implementations\UserRepository.cs:C:\ の Novatec.Administracija.Services.Security.SecurityManager.AuthorizeUserAction(Int32 userId, String commandId) の 140 行目Projects\EGrad\Main\Source\Novatec.E-Grad\Source\Novatec.Administracija.Services\Security\SecurityManager.cs:Novatec.Framework.Infrastructure.Services.ServiceBase.ExecuteCommand(Int32 userId, String appId, ICommand の 48 行目)コマンド) C:\Projects\EGrad\Main\Source\Novatec.E-Grad\Source\Novatec.Framework.Infrastructure\Services\ServiceBase.cs:94 行目 InnerException:
nhibernate - NHibernate QueryOverを使用してこの複雑なSQLクエリを再作成するにはどうすればよいですか?
次の(簡略化された)データベースレイアウトを想像してみてください。
特定の日に特定の宿泊施設に行くことなどに関連する多くの「休日」の記録があります。
一連の検索条件(期間、出発空港など)を前提として、データベースから各宿泊施設に行く「最高の」休日(つまり最低価格)を取得したいと思います。
同じ価格のレコードが複数あるため、オファーの保存(降順)、出発日の昇順で選択する必要があります。
私はこれを行うために次のようなSQLを書くことができます(これが必ずしも最適な方法であるとは限りません):
ご覧のとおり、これは別のサブクエリ内でサブクエリを使用します。
ただし、いくつかの理由から、NHibernateでこれと同じ結果を達成することが私の好みです。
理想的には、これはQueryOverを使用して実行されます。これは、検索条件を動的に構築するためです。これは、QueryOverの流暢なインターフェイスを使用するとはるかに簡単になります。(私はNHibernate Linqを使用することを望んでいましたが、残念ながらそれは十分に成熟していません)。
多くの努力の結果(NHibernateの比較的初心者であるため)、すべての宿泊施設とその最低価格を取得する非常に内側のクエリを再作成することができました。
だから私の質問は...
QueryOver、または必要に応じてCriteria APIを使用して目的を達成する方法についてのアイデアはありますか?
私はHQLを使用したくないのですが、それが必要な場合は、HQLを使用してどのように実行できるかを確認します(ただし、検索条件を作成するのが難しくなります(または面倒になります)。
これがNHibernateを使用して実行できない場合は、SQLクエリを使用できます。その場合、私の質問はSQLを改善/最適化できるかということです。
c# - QueryOverとWhereExistsのヘルプ
私は問題があります。私には人と猫がいます。各Personにはいくつかの猫がいます(Catsには、Personsの主キーを指す外部キーがあります)。それぞれの猫には年齢があります。「古い」猫を飼っている人を選びたいです。「古い」猫だけでなく、これらの人のすべての猫が欲しいです。QueryOver構文でそれを行う必要があります。
T-SQLでは、次のようになります。
サブクエリを使用する必要があることはわかっています。「古い」nhibernate構文(Criteria / DetachedCriteria)を使用すると簡単に使用できますが、QueryOver構文では使用できません。
「IN」状態は必要ありません。私の主キーは複雑なキーなので、INでは実行できません。
sql - NHibernate QueryOver: 結合の制限による分離
1 つは親に関連し、もう 1 つは子に関連する 2 つの制限を OR 結合したいと思います。
次のコードがあります。
SQL 出力:
残念ながら、2 つの制限の間には AND 結合があります。
代わりに、次のように OR を使用したいと思います。
新しい QueryOver API を使用してこのクエリを解決するにはどうすればよいですか?
nhibernate - QueryOverで削除しますか?
NHibernate(V3)でオブジェクトのグループを削除するときのコードを改善したいと思います。現在、取得したコレクションを繰り返し処理し、各オブジェクトに対してdeleteを呼び出しています。これにより、n +1個のSQLステートメントが生成されます。
NHibernateセッションがこのメソッドを提供していることに気づきました:Delete(string query)
この方法を使用することで、1つのSQLステートメントで同じことができると思います。
このメソッドをQueryOverAPIと組み合わせて、HSQLを回避する方法があるかどうか知っていますか?
nhibernate - N + 1の問題を回避するために、先物を含むネストされたコレクションをNHibernateの遅延読み込み
私はこのようなオブジェクトモデルを持っています(擬似コード):
特定の製品をロードして、その推奨の画像を表示したい場合、N+1の問題が発生します。(推奨事項は遅延ロードされ、ループがそれぞれの.Imagesプロパティを呼び出します。)
私がやりたいのは、グラフのこの特定の部分を熱心にロードすることですが、それを行う方法がわかりません。推奨事項を熱心に読み込むことはできますが、画像を読み込むことはできません。これは私が試したことですが、うまくいかないようです:
QueryOverを使用して、これを達成するための最良の方法は何ですか?この特定のシナリオだけで、常に画像を熱心にロードしたくありません。
編集:私は私のアプローチを変更しました、そしてそれは私が考えていたものとは正確には異なりますが、それはN+1の問題を回避します。現在、2つのクエリを使用しています。1つは製品用で、もう1つはその推奨の画像用です。製品のクエリは簡単です。これが画像クエリです:
c# - Nhibernate + QueryOver: 機密情報を無視して Where でフィルター処理する
nHibernate で QueryOver を使用して単純なクエリを作成しようとしていますが、すべてを小文字に変換するか、機密情報を無視する必要があります。
どうすればこれを達成できますか?
更新:
問題はDBのコレクションにある可能性があると誰かが示唆しましたが、私はそれで問題が発生したことはなく、このスクリプトは機能します:
c# - nhibernate queryover query でフェッチ戦略 (select、join など) を指定する
SelectまたはSubSelectモードを使用してコレクションを取得するQueryOverを使用してクエリを作成しようとしています。問題のエンティティは です。というコレクションをロードしたいのですが、クエリでこれを実行しています:Track
TrackPrices
ただし、これによりleft joinが作成され、ページネーションの問題が発生します。別のselectまたはsubselectを実行したいと思います。それができるかどうか、何か考えはありますか?私の知る限り、基準 API を使用すると、次のようになります。
しかし、コード内のマジック ストリングを避けたいので、QueryOver API を使用することをお勧めします。
c# - Visual Studio2008を使用してNhibernate3をSharpArchitectureと連携させる方法はありますか?
Visual Studio 2008で動作し、NHibernate3を使用するSharpArchitectureのバージョンを見つけようとしましたが、失敗しました。NHibernateバージョン3のQueryOverAPIを使用したいと思います。入手可能な最新のビルドは、Visual Studio 2008、MVC 2、およびNHibernate2と互換性のあるsharp-architecture-1.6.0.0-templify-package.zipです。新しいバージョンのSharpArchitectureは、VisualStudio2010とのみ互換性があります。SharpArchitectureのカスタムビルドを作成しようとしました。
「SharpArchitecture1.6FullSource」プロジェクトの参照を変更しました...:
- NHibernate.Validatorからバージョン1.3.0.4000
- NHibernateからバージョン3.1.0.4000
- NHibernate.ByteCode.Castleからバージョン3.1.0.4000へ
- FluentNHibernateからバージョン1.2.0.694へ
- Castle.CoreからVersion=2.5.2.0
...プロジェクトのbinディレクトリにある古いdllを新しいdllに置き換えます。次に、ClickToBuild.bat(ダウンロードしたSharp Architecture zipファイルのベースディレクトリにあります)を実行して、ソリューションをビルドしました。ビルドは成功し、すべてのテストに合格しました。次に、自分のプロジェクトのすべてのdllを、作成したばかりの新しいSharpArchitectureのものに置き換えました。私のプロジェクトはコンパイルされますが、実行すると、SharpArch.Data \ NHibernate\NHibernateSession.csは次の例外をスローします。
ファイルまたはアセンブリ'Castle.Core、Version = 2.5.1.0、Culture = neutral、PublicKeyToken=407dd0808d44fbdc'またはその依存関係の1つを読み込めませんでした。見つかったアセンブリのマニフェスト定義がアセンブリ参照と一致しません。(HRESULTからの例外:0x80131040)
web.configでCastle.CoreのbindingRedirectを使用してみました。
しかし、それでも機能しませんでした。
私は正しい方向に進んでいますか?それを機能させるために他に何ができますか?