問題タブ [hibernate-onetomany]
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.
java - OneToMany / nullable 関係での Hibernate のパフォーマンスの問題
@OneToMany
Parent->Child->Child->Child DB 関係に使用します。
大量のデータ (100K の挿入) を使用するシナリオでは、挿入時にパフォーマンスが大幅に低下します (実際にはタイムアウトになります)。ただし、少量のデータ (1K 挿入) の場合は問題ありません。
そのため、正当な理由がないためnullable = false
、子テーブルの DB 外部キーを削除して変更し、null を許可すると、パフォーマンスが非常に良好になりました。誰でもこれを説明できますか?
更新:デバッグをオンにしました..nullable = false
子テーブルのIDを生成する大きなボトルネックがあるようです。ID が生成されるのを待ってタイムアウトし、これがログに何度も記録されます。
DBにデータを挿入することさえできません。id gen に行き詰まっています。現在、子テーブルに現在ある最大 ID 値を見て ID を生成するように Hibernate を設定します。
これより前は、DB シーケンスを使用していましたが、同じ問題が発生していました。
を省略するnullable = false
と、これらの ID gen ステートメント (108K) が表示されますが、25 秒で完了します。では、なぜこれらのステートメントは (文字通り) 永遠にかかるのnullable = false
でしょうか?
hibernate - マップされていないクラスでの Hibernate マッピング
私は 2 つのテーブルを持っています... Challenge と ChallengeYear、ChallengeYear は課題の年のリストを作成するだけです。
リストの年のリストを含む、Challenge をエンティティにしたいだけです。これは可能ですか?
@JoinColumn および @OneToMany と一緒に @SecondaryTable を調べましたが、どちらもうまくいかないか、何かを見落としています。
誰かが私を助けることができますか?
こんにちは、ヤン
grails - Grailsの1対多の関係で親を削除すると、子でbeforeInsertイベントが呼び出されるのはなぜですか?
私には1対多の関係があり、複数の子を持つ親を削除しようとすると、最初の子でberforeInsertイベントが呼び出されます。このイベントには、親を削除するときではなく、子を挿入する前に呼び出すコードがあります。何が間違っているのかについてのアイデアはありますか?
エンティティ:
java - Hibernateで失われました-OneToManyにより、1つが何度も引き戻されます
私はこのDBデザインを持っています:
そしてこの休止状態のマークアップ:
と
そして、私はレポートとそのレポートの4つのプロパティに挿入しました。今私がこれを実行すると:
レポートは、4つのプロパティを含むマップで1回だけではなく、4回返されます。正直に言うとHibernateは得意ではなく、ストレートSQLを好みますが、学習する必要がありますが、それが何であるかわかりません。それは間違いです.....?
助言がありますか?
java - 一対多関係におけるCascadeTypeの問題
互いに一方向の1対多の関係を持つ2つのクラスがあります。
データベースに FieldMapper のセットを含むオファーを保存したいと考えています。OneToMany で CascadeType.ALL を使用すると、次のエラーが発生しました。
CascadeType を別のものに変更すると、次のエラーが発生しました。
そして、ここに Offer を保存します:
他の場所ではセッションを使用しません。
tx.commit();
インラインスローは説明された例外をスローします。
ご協力いただきありがとうございます。
hibernate - Hibernate:OneToManyマッピングはPKに基づいていませんか?
2 つのエンティティ/テーブルがあります。
1つは適切なエンティティです。それを と呼びましょうdata
。いわゆる「多言語コード」を含む多くのフィールドがあります。
2 番目のテーブル にcode
は、多言語の値自体が含まれています。
ここにいくつかのサンプルデータがあります:
次のように、データエンティティのプロパティの大陸、国などをマップとしてマップしたいと思います。
そのため、次のように適切な言語のテキストを読むことができます。
また、ユーザーの言語を使用して、これらの「コード」の値をテキスト検索できるようにする必要もあります。(たとえば、フランス語で country='suisse' のすべてのデータを取得します!)
OneToMany
では、現在のエンティティの主キーではないキー フィールドを使用してコレクションをマップすることは可能ですか? 大陸コレクション「コード=私のcontinentCode
財産の値であるコードテーブルからのすべてのレコード」が必要です。それとも、この種の関係を表現するためのより適切な方法があるのでしょうか?
NB : 残念ながら、SQL スキーマを変更することはできません...
java - forループのGrails AddTo
私はgrailsの初心者であるために問題に直面しています。ストーリーを読むためのWebサイトを作成しています。私の目標は、ストーリーのコンテンツをいくつかのページに保存してリストを取得し、簡単にページ付けすることです..だから私は次のことをしました。
ドメインで、ストーリーと呼ばれる2つのドメインを作成し、これを持っています:
}
もちろん、ページと呼ばれるドメインには次のものがあります:
}
コントローラーの保存方法は次のようになります。
私はそれが乱雑に見えることを知っていますが、それはプロトタイプです..とにかく..問題は、条件がtrue ..しかし、実際には、ページを1つずつ保存する必要があると思っていたときに、最後のpage_idxのみで最後のインスタンスが表示されるので、すべてのストーリーのページのリストを取得できます..
なぜこれが起こるのか、私がやったことよりも簡単な方法があります..
私はここで感謝されている助けを待っています
java - Hibernate:識別関係のレコードなしでエンティティのレコードを取得するための HQL を作成するにはどうすればよいですか?
Hibernate Objects を次のように定義しています
タグを持たない SomeText オブジェクトをすべて取得したいと考えています。以下のHQLを書いたのですが、うまくいきません。
これらのレコードを取得するにはどうすればよいですか。SQL の世界では、text_tag_reln テーブルから個別のすべての textId を取得し、そのセットに存在しないすべての SomeText ID を取得するクエリを作成します。HQLでこれを行うにはどうすればよいですか?
hibernate - Hibernate1対多
Hibernateのドキュメントによると:
1対多側を所有側として双方向の1対多をマップするには、mappedBy要素を削除し、manyを1に挿入可能および更新可能としてfalseに設定する必要があります。このソリューションは最適化されておらず、いくつかの追加のUPDATEステートメントを生成します。
私の質問は次のとおりです。
- このような設定の利点は何ですか。所有側としてメニートノン側を作ってみませんか
- この設定でこれらの2つの値が必要な理由:insertable = false、updatable = false
java - 休止状態:マルチキーテーブルのキーの1つと結合する
テーブルCategoryとテーブルTranslatableTextがあります。カテゴリはこんな感じ
カテゴリエンティティで、マッピングを定義しました。
ただし、実行すると、idではなくTranslatableDescriptionIdにアクセスしようとします。TranslatableTextエンティティが定義している場合でも
間違った名前が選択されたクエリ:
translatab0_.TranslatableDescriptionId as Translat4_13_1_、translatab0_.id as id1_、translatab0_.lang as Lang1_、translatab0_.id as id22_0_、translatab0_.lang as Lang22_0_、translatab0_.text as Text22_0_ as tblTranslateableText translatab0_ where translatab0_.text as Text22_0_ from tblTranslateableText translatab0_ where 119'、' 103'、' 116'、' 121'、' 107'、' 113'、' 101'、' 109'、' 105'、' 123'、' 106'、' 125'、' 124 ' 、'114')
マッピング@JoinColumnを次のように変更した場合
アプリをロードすると、次のエラーが発生します。
org.hibernate.MappingException:論理名の列が見つかりません:org.hibernate.mapping.Table(Category)および関連するスーパーテーブルとセカンダリテーブルのID
良い方法として、私も試しました:
それは私にエラーを与えました:
org.hibernate.MappingException:論理名の列が見つかりません:org.hibernate.mapping.Table(Category)および関連するスーパーテーブルとセカンダリテーブルのTranslatableDescriptionId
私がすべきことへの提案はありますか?私は本当にCategoryのtranslateableTextにその説明のすべての翻訳を含めたいので、Category.TranslatableDescriptionId==TranslatableText.idに参加したいと思います。
UPDATE1:TranslatableTextは多くのエンティティで使用されているため、categoryIdをその中に入れて、関係を逆にすることはできません。
UPDATE2:と言ってロードできました@JoinColumn(name="id")
が、これによりHibernateでClassCastExceptionが発生し、キーとして整数を使用する代わりに、キーとして単一の整数を含む配列が使用されました。これは文字列にできないため、適切なSQLになりません。だから、それはおそらくまだ私が望むマッピングではありません
乾杯
ニック