問題タブ [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.
hibernate - OneToMany リレーションに対する Hibernate Cascade 操作により、更新クエリが提供されます
子は複合主キーを使用します。そのためのコードは次のとおりです。
上記のコードのように、親と子の 1 対多の関係があります。また、Child には複合キーが主キーとして含まれています。
Child に複合キーを設定し、それを Parent に追加し、Parent に設定し、session.save() で Parent を保存します。これにより、Child で挿入ステートメントが正常に実行されます。同じように、別の Child オブジェクトを挿入しようとしても、以前と同じ複合キーを含み、外部キーが異なり、Parent オブジェクトを再度保存しようとすると、実際には Child の既存の行が新しい Parentid で更新されます。
リレーショナル データベースによると、私の理解では、Child テーブルの複合キーの重複エントリは挿入に失敗するはずです。しかし、値が同じ (??) ため、Hibernate は既存の行を更新しています。複合キーに異なる値を挿入しようとしましたが、子テーブルにうまく挿入されました。
問題を正しく理解できるように努めていることを願っています。同じ値を持つ行で更新が行われる 2 つのテーブル間には、単方向の 1 対多の関係があります。
1対多の問題なのか複合キーの問題なのか混乱しています。
java - 冬眠します。注釈を使用して1対多の関係を適切に整理するには?
Hibernate の簡単な例を作成しようとしています。ユーザーとメモの 2 つのエンティティがあります。1 対多の関係があります (1 人のユーザーが多数のメモを持つことができます)。注釈を使用してデータベースにこれらの関係を正しく表示するのを手伝ってください。しかし、関係を実装するために 3 番目のテーブルを作成したくありません。必要なテーブルは 2 つだけです。
ここに私のクラスがあります:
ユーザー.java :
注.java :
Main.java :
hibernate.cfg.xml :
私のデータベースでこのコードを実行した後、Hibernate は 2 つのテーブルを作成して埋めました。
しかし、問題が発生しました。メモテーブルのフィールドuser_id値が null ですが、ユーザー ID (この場合は 1) と等しくなければなりません。
この問題とこの例を正しく機能させるには、注釈に何を追加する必要がありますか? ただし、追加のテーブルを作成する必要はありません。
私は本当に助けていただければ幸いです!
hibernate - Hibernate 構成エラー - 注釈を使用した 1 対多の関係
注釈メカニズムを使用して休止状態で 1 対多の関係を構成する方法について説明する多くのビデオとチュートリアルを確認しました。それでもこのエラーが発生します。
エラーは次のとおりです。 bean.コース】
私のクラスは次のとおりです。
教授.java
そして course.java は次のとおりです。
java - 休止状態:新旧の記録
ResultテーブルとResultAuxテーブルの間にOneToMany接続があります。Resultから一連のResultAuxオブジェクトを取得できます。その後、いくつかのResultAuxオブジェクトを設定に追加し、各設定エントリでマージを使用して変更をデータベースにフラッシュします。このような:
私が知る必要のあるいくつかの追加のアクションについては、新しいレコードを設定してテーブルに挿入するか、古いレコードであり(変更されているかどうかに関係なく)更新されます。ResultAuxセットのすべてのエントリにすでにIDがあることに気付いたので、他のテーブルの場合のようにnullをチェックできません。そのようなことを決定する方法はありますか(できれば余分なライブラリを含まない)?
編集:
associations - hibernate基準またはhqlを使用して1対多の関連付けから取得せずにコレクションのメンバーを削除するにはどうすればよいですか?
機関が複数のコースを処理できる機関-> コース からの一対多の関連付けがあり ます。このユースケースでは、コースは 1 つの教育機関にのみ属することができると考えてください。
そして、それらのマップは別のテーブルに保存されます
機関オブジェクトと関連するコレクションを取得せずに、HQL または Hibernate 基準を使用してコースを削除し、マッピング テーブルの対応する行も削除するにはどうすればよいですか。
spring - エンティティが@Transactionalコンテキストを終了するときのスプリングコールバック?
Springには、トランザクションコンテキストの終了時に、エンティティのメソッドまたは各エンティティのエンティティリスナーを呼び出すためのフックがありますか?
SpringとHibernateを使用して、検索用にインデックスを作成する一連のエンティティを管理しています。現在、Hibernateの@PreUpdateメソッドでエンティティリスナーを使用して、エンティティが作成または変更されたときにインデックスの再作成を実行しています。もちろん、このイベントは、エンティティ自体のプロパティ(つまり、データベース行の値)の1つ以上が更新された場合にのみ発生します。
この問題は、エンティティに重要な子プロパティの@OneToManyマッピングがある場合に発生します。これらの子プロパティの1つが更新されると、PreUpdateコールバックは親エンティティで呼び出されません。
プロパティがいつ更新されるかはすでに追跡していますが、すべての更新が完了するまで待ってから、インデックスの再作成をトリガーします。このようなインデックスの再作成を行うのに最適な場所はどこですか?PreUpdateはほとんどの場合うまく機能しますが、このしわにより、エンティティが@Transactionalスコープを離れるときにフックがあったのではないかと思いました。または、OneToManyの子が永続化されたときに、親でコールバックをトリガーするHibernateの方法はありますか?
hibernate - Hibernate のページ付けされた OneToMany 関係
多面をページ分割する必要がある Hibernate で 1 対多の関係をマップするにはどうすればよいですか? (つまり、数百以上の関連オブジェクトがあります)
OneToMany アノテーション (またはそれに相当する xml) の使用は役に立ちません。なぜなら、一方のオブジェクトをロードすると関連オブジェクトがすべて取得され、メモリ障害が発生するからです (遅延読み込みを使用していても) .
考えられるアプローチ (私は既に使用しています) は、DAO 実装に getter メソッドを追加することです。これにより、ページネーション パラメーターを導入できます。ただし、カスケードなどの一部の機能が失われるため、これは理想的ではないことがわかります (たとえば、オブジェクトを関連付けるために DAO クラスにセッター メソッドを含める必要があります)。さらに、一面オブジェクトには関連する多面オブジェクトを取得するメソッドがないため、OOP の感覚が失われます。最善の解決策は何ですか?
私の主張をさらに説明するために、次のような関係を持つ 2 つのクラスがあるとしましょう: A には多 B
があります。したがって、結果をページ分割するために、getAllB() メソッドを使用して個別の ADaoImpl クラスを作成します。このクラスには、一度に 1 ページのデータのみを返すページ分割パラメーターを含めることができます。これは正しいです?どんな助けでも大歓迎です。
java - ハイバネート、多対一、削除
次のように、クラス A からクラス B への一方向の 1 対多の関連付けがあるとします。
データベースでは、これらは 3 番目のテーブルを介して接続され、ID を保持します。
ここで、A に接続されている B オブジェクトを削除したいと思います。A には独自のリポジトリ クラスがあり、B には独自のリポジトリ クラスがあります。
これが私のプロジェクトの同様の設定で行われた方法は、最初に問題の A に問題の B を削除するように依頼し、次にEnitityManager
データベースから B を削除するように指示することです。
これにより、2 つの選択肢の間で少し行き詰まります。どちらも私の考えでは最適ではありません。
のリポジトリ メソッドは
BRepository
、接続先の A からの B の削除と、 を介したデータベースからの削除の両方を処理しますEntityManager
。B のリポジトリ クラスが A オブジェクトを操作しなければならないので、私はこれが好きではありません。BRepository のリポジトリ メソッドは、EntityManager による削除のみを処理し、A のコレクションからの削除は呼び出し元に任せます。A のコレクションから B を最初に削除せずに誰かがリポジトリを呼び出すと、ひどく失敗するため、これはさらに好きではありません。
2つのうち、最初のものが断然最高だと思います。しかし、それでも、私はそれがきれいだとは本当に思いません。
Hibernate には、データベースからの削除時に、アイテムが含まれているコレクションからアイテムを削除できるようにする構造がありますか? (B を含む A も同じトランザクションにロードされているため、B を削除しようとすると失敗します。そのため、削除されたものを保存しようとすると、トランザクションの終了時に失敗します。)
( in A を追加mappedBy
する@OneToMany-mapping
と問題は解決しますか?)
java - 多対1の関係で@Access= FIELDアノテーションを使用する必要がありますか?
カテゴリに分けられたエンティティがあります。各エンティティは多くのカテゴリに属することができるので、私は1対多の関連付けを持っています。
以下で正しくORMされていますか?
私の具体的な質問は、@Accessアノテーションを使用する必要があるかどうかです。私がそれを使用しない場合、HibernateはgetParents
ゲッターをマップしないことをどのように知るのでしょうか?