問題タブ [named-query]
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.
hibernate - 名前付きクエリとスタートアップパフォーマンスを休止状態にする
JPA/Hibernateを使用して新しいプロジェクトを開始しています。チームの誰かが、以前にパフォーマンスの問題があったと言って、名前付きクエリの使用を拒否しています。彼によると、名前付きクエリは起動時に解析されるだけでなく、実行されるため、起動が大幅に遅くなります。
それは正しいですか?もしそうなら、休止状態がクエリを実行するのを防ぐための構成はありますか?
jakarta-ee - ユーザーの未読メッセージを取得する最速の方法
タイトルで申し訳ありませんが、質問を要約する方法がわかりません:\
DB にマップされた User と Message の 2 つのエンティティがあり、ユーザーのすべての未読メッセージをすばやく取得する方法が必要です。
ここにいくつかのコードがあります:
_
したがって、基本的に、私が知る必要があるのは、次のようなコードを回避する方法があるかどうかです。
クエリで実行できることは知っていますが、Java EE プロジェクトで使用する方法がわかりません。
テーブルからのすべての未読メッセージではなく、User の現在のインスタンスのみの未読メッセージを取得するには、どのようにクエリを作成する必要がありますか?
前もって感謝します。
hibernate - NOT IN の Grails 名前付きクエリ
NOT IN 句を使用して名前付きクエリを作成する簡潔な方法を考え出そうとしています。制限クラスには「not in」構造がないようです。これを行う良い方法を知っている人はいますか?
解決策:
注: 「in」という単語は予約語であるため、引用符で囲む必要があります。
これらの名前付きクエリは、次のように使用できます。
jpa - プロパティがオブジェクトの場合の名前付きクエリ?
JPAでこのクエリを作成したいと思います:
これは正常に機能していますが、私の問題はParty、id としてではなくオブジェクトとしてのみ持っているため、機能させることができないことです。
Users名前付きクエリを実行しようとしている -entity には、次のものがあります。
ドット表記のオブジェクトのように実装しようとしましたが、うまくいきません:
-objectpartyId内で呼び出されるプロパティがありますが、機能していません。そのための解決策はありますか、または新しいものが挿入されるたびにParty、1つのプロパティをUsers-beanのように追加して入力する必要がありますか?private int partyIDPartyUsers
助けてくれてありがとう!サミ・ヌルミ
java - NamedNativeQuery 使用時の Hibernate の「無効な列名」エラー
最近、オブジェクト@OneToManyを別のオブジェクトにマッピングするように変更しましたFetchType.LAZY。しかし@NamedNativeQuery、Oracle 関数を呼び出すを使用してこれらのオブジェクトのリストをロードしようとするとjava.sql.SQLException: Invalid column name、この新しい OneToMany マッピングに対して がスローされます。しかし、 としてマークされているのでLAZY、この変数にデータを入力しようとするべきではありませんか?
理論的には、この列に空の値を返すように関数を変更することはできますが (基本的にはハック)、@NamedNativeQueryこれらのオブジェクトの 1 つを入力するために a を使用するすべての場所にそれをロールアウトする必要があります。
これは私にはバグのようです。回避策はありますか、不足しているもの、または Hibernate の新しいバージョンで修正される可能性があるものはありますか?
私は hibernate-core 3.3.2.GA、hibernate-entitymanager 3.4.0.GA、hibernate-annotations 3.4.0.GA、および hibernate-commons-annotations 3.3.0.ga を使用しています。
jpa-2.0 - JPAを開く外部キー関係から結果を取得するにはどうすればよいですか
おはようございます。私はこの質問に答えようとずっと探していました。
別のテーブルへの外部キーを持つテーブルがあり、両方のテーブルからの結果が必要な場合は、基本SQLを使用して、外部キーに対して内部結合を実行し、要求したすべての結果情報を取得します。外部キーでJPAエンティティを生成すると、外部キー列に@ oneTooneアノテーション、@ oneToMany、@ ManyToMany、@ManyToOneなどが追加されます。外部キーに@oneToManyがあり、関連するテーブル列の主キーに対応する@ManyToOneがあります。また、正しい列に@joinedONアノテーションがあります...最初からすべてを選択する基本的な名前付きクエリもあります。テーブル。基本的なSQLで行う必要があるように、両方のテーブルから情報を取得するために結合を行う必要がありますか?それとも、私がそれらの注釈を持っているという事実は、それらのレコードを私のために引き戻しますか?外部キーの関係に基づいてテーブルBに関連するテーブルAがあり、両方のテーブルのレコードが必要な場合は、外部キーに基づいてテーブルAからBに結合するか、
または他のいくつか-そのような意味がない(正確に正しくない場合は私のSQLを許してください、しかしあなたは考えを理解します)...そのクエリはAとBからすべての列を選択します私が使用している名前付きクエリ...
これが、ステートレスセッションBeanでの呼び出し方法です...
この呼び出しはテーブルAのすべての列を返しますが、テーブルBの列が不足しています。私の最初の本能は、クエリを変更して2つのテーブルを結合することです...しかし、そのようなものを使用することのポイントは何であるかを考えさせられますJPAの場合、とにかく別の場所で作成するのと同じクエリを作成するだけです。さらに、私は単純なものを見落としたくありません。では、オーバーフロー愛好家をスタックするとはどういうことですか?JPAを使用して結合されたクエリのすべてのデータを取得するにはどうすればよいですか?
hibernate - Hibernate の findByNamedQuery を使用して Long のリストを返すにはどうすればよいですか?
SQL Server でストアド プロシージャを実行するために (最適化のため)、Hibernate の getHibernateTemplate().findByNamedQuery() を使用しています。ストアド プロシージャは、Long のリストを返すことになっています。
私が見る限り、このようなリストを返す唯一の方法は、Hibernate 専用のラッパー クラスを作成し、これを @NamedNativeQuery 宣言の一部で使用することです: resultClass=LongWrapper.class
これは、Hibernate の findByNamedQuery() 関数を使用して long のリストを返す唯一の方法ですか?
つまり、ストアド プロシージャは 100 万近くの long を返すため、メモリ割り当てとパフォーマンスを最適化する必要があるため、既にラップされた Long を自分のラッパー クラスにラップするのは気が進まないのです。不必要なオーバーヘッドのようです。
助言がありますか?
前もって感謝します!!
hibernate - @NamedQueryに適用されるTOP句
@NamedQuery(name="CustomerMarket.findByMarketId", query="SELECT DISTINCT c.marketid FROM CustomerMarket c WHERE c.marketid LIKE :mask")
クラスCustomerMarket定義でクエリに名前を付けまし
た。
350_000の結果のうち最初の1_000を取得したいので、setMaxResultを適用しました。
このクエリを実行した後、server.logを確認し、これを見つけました
正しいデータ、最初の1_000レコードを取得しましたが、TOP制限が適用されているかどうかと場所を知りたいです。
このTOP句はどのように処理されますか?
- TOPはHibernateによって使用される呼び出し可能ステートメントに適用され、これはログに表示されません
- TOPは、DBから結果を受け取った後に適用され、Java側でデータをフィルタリングします
- または他の何か
ほとんどすべてを表示するためにpersistence.xmlとlog4j.propertiesを設定しましたが、SQLスクリプトを持っているので、問題はないと思います。
編集:両方の場合(setMaxResultsを使用する場合と使用しない場合)のパフォーマンスを測定し、次の時間を取得しました:
TOPを使用しない最初のケースでは、選択ごとに平均1400msの時間が消費されました。TOPが実装された2番目のケースでは、平均時間消費は約150msでした。
また、このTOP実装は、使用されているHibernate方言(Sybaseを使用しています)に依存している可能性があるとも言われました。また、ログに表示される選択は、DBに送信される選択とまったく同じです。しかし、この場合、結果セットからの350kの結果(または結果がHibernateセッションにどのように保存されるか)をメタデータなしで構造リストに変換するのに非常に長い時間がかかるのは正常ですか?内部的には次のように変換されていると想像できます。
これはそれほど複雑ではないようですが、なぜこの時差があるのですか。Hibernateは多くの機能を備えた複雑なフレームワークであるため、おそらく私は素朴です。:-D
inheritance - Named-Query(JPA)でのブール式のコンパイルエラー
私のプロジェクトでは、EclipseIndigo内でJPA2とHibernateを使用しています。
プロジェクト内のすべてのエンティティに必要ないくつかのフィールドを提供する抽象BaseEntityクラスがあります。したがって、このクラスは、プロジェクトで使用する他のすべてのエンティティによって拡張されます。
BaseEntityのフィールドの1つはブールフィールドdeletedです。これは、エントリを削除済みとしてマークするために必要です(データベースからオブジェクトを物理的に削除することは許可されていません)。サブクラスに名前付きクエリを設定し、WHERE句で「NOTu.deleted」を使用しようとすると、コンパイラから次のエラーメッセージが表示されます
。状態フィールドパス「r.deleted」を解決できません。有効なタイプに。
BaseEntityのコードの下:
継承クラスのコード:
何が間違っているのか推測できますか?
編集:以下のコメントに従ってコードを更新しました。
java - パラメータを使用して名前付きクエリで式を指定する
クエリ パラメーターを使用して、名前付きクエリでテーブル (オブジェクト)、列名、または式を指定できますか?
たとえば、オブジェクト全体を選択するか、カウントだけを選択するかを切り替えることができる単一のクエリを使用したいと考えています。
そして、次のように Java でパラメータを設定します。
param1のような設定でコピペを避けたい
また