問題タブ [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 - Hibernate-OneToMany-いくつかの列
私はそれらの2つのテーブルTeacherとContactを持っています、教師はxのContactsを持つことができます。そこで、ここでは@OneToManyアソシエーションを見ています。
テーブル構造:
ユーザー[userid、username、email、...]
連絡先[contactid、contactname、ref、reftype、...]
ユーザークラスからすべてのユーザーの連絡先をロードしたい。それを行うには、次のようなクエリを実行します
8240はランダムなユーザーIDであり、reftypeTはTeacher用です。この連絡先テーブルは、学校の連絡先やその他のタイプの顧客にも使用されます。問題は、Hibernateでこれを行う方法がわからないことです。 embedbedIdを使用する必要がありますか?またはJoinColumns?
私がこれまでに行ったことは、私の先生を持っている連絡先にリンクするcontact.ref=teacher.teacherid
ことですが、私が欲しいのは:
それ、どうやったら出来るの?
これが私のコードTeacher.classです
Contact.class
hibernate - JPA アノテーションの inverse=true
私のアプリケーションでは、JPA 2.0 と Hibernate を永続化プロバイダーとして使用しています。2 つのエンティティ間に 1 対多の関係があります ( a@JoinColumn
と notを使用@JoinTable
)。inverse=true
JPA アノテーションで (で指定されているようにhbm.xml
) 関係所有者を逆にする方法を知りたいと思っていました。
ありがとうございました。
hibernate-mapping - 1 対多の FK でも使用される複合 ID キー プロパティに "insert='false' update='false'" をマップするにはどうすればよいですか?
既存の DB スキーマを使用してレガシー コード ベースに取り組んでいます。既存のコードは、SQL と PL/SQL を使用して DB でクエリを実行します。プロジェクトのごく一部をデータベース エンジンにとらわれないようにする作業が行われました (最初は、最終的にはすべてを変更します)。Hibernate 3.3.2.GAと "*.hbm.xml" マッピング ファイル (注釈ではなく)を使用することを選択しました。残念ながら、レガシー機能を元に戻すことはできないため、既存のスキーマを変更することはできません。
私が直面している問題は、FK が複合 PK の一部でもある単方向の 1 対多の関係をマップしようとしている場合です。クラスとマッピングファイルは次のとおりです...
CompanyEntity.java
CompanyNameEntity.java
CompanyNameEntity.hbm.xml
このコードは、名前を持つ Company の SELECT および INSERT に対して問題なく機能します。既存のレコードを更新しようとしたときに問題が発生しました。BatchUpdateException を受け取り、SQL ログを調べたところ、Hibernate が愚かなことをしようとしていることがわかりました...
Hibernate は、更新する前に子レコードの関連付けを解除しようとしていました。問題は、このフィールドが PK の一部であり、null 不可であることです。Hibernate がこれを行わないようにする簡単な解決策は、親マッピングの「key」要素に「not-null='true'」を追加することであることがわかりました。SO メイマッピングは次のようになります...
CompanyNameEntity.hbm.xml
このマッピングは例外を与えます...
私の問題は、これらの属性を key-property 要素に追加しようとしたが、DTD でサポートされていないことです。また、キー多対1要素に変更しようとしましたが、それもうまくいきませんでした。そう...
1 対多の FK でも使用される複合 ID キー プロパティに "insert='false' update='false'" をマップするにはどうすればよいですか?
hibernate - HIbernate - 「外部キー参照からの列数が間違っています。2 インチ エラーのはずです
私はしばらくの間、この質問の解決策を探していました。この問題の原因となっている多対多の関係について話しているスレッドをいくつか見つけましたが、それが私の状況には当てはまらないと思うので、これを新しいスレッドに投稿します。
次のデータベース設計があります: ========================================= ===================================
ユーザー テーブル: PK USER_ID、USER_NAME UNIQUE、...
item テーブル: PK ITEM_ID、FK ITEM_SELLER -> user.USER_ID との多対 1 関係、FK ITEM_BUYER -> user.USER_ID との多対 1 関係、...
入札テーブル (ユーザーとアイテムの間のブリッジ): PK BID_ID、FK BIDDER_ID -> user.USER_ID との多対 1 関係、FK ITEM_ID -> item.ITEM_ID との多対 1 関係、...
カテゴリ テーブル: PK CAT_ID、...
item_category テーブル (カテゴリとアイテムの間のブリッジ): PK ITEM_CAT_ID、FK ITEM_ID -> item.ITEM_ID との多対 1 の関係、FK CAT_ID -> category.CAT_ID との多対 1 の関係、...
================================================== ============================
NetBeans を介して休止状態を使用してこれを設定しようとしています。hibernate.cfg、reveng、および util ファイルのセットアップ手順を説明したチュートリアルを見つけ、NetBeans ツールを使用して POJO を生成する方法を示しました。チュートリアルでは、cfg ファイルを右クリックして HQL クエリを実行し、すべてが正しく機能していることを確認します。簡単なテーブル (上記のユーザー テーブル) を使用してこのプロセスをテストしたところ、すべてが機能しました。ただし、すべてをまとめようとすると、次のエラーが発生します。
org.hibernate.AnnotationException: A Foreign key refering GavelDB.User from GavelDB.Bid has the wrong number of column. should be 2
at org.hibernate.cfg.annotations.TableBinder.bindFk(TableBinder.java:276)
at org.hibernate.cfg.ToOneFkSecondPass.doSecondPass(ToOneFkSecondPass.java:89)
at org.hibernate.cfg.AnnotationConfiguration.processFkSecondPassInOrder(AnnotationConfiguration.java:499)
at org.hibernate.cfg.AnnotationConfiguration.secondPassCompile(AnnotationConfiguration.java:304)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1286)
at org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:859)
前に述べたように、この問題を検索する以前の試みのすべてで複合キーが指摘されましたが、この設計ではそれらを回避するように努力したので、それがどのように問題になるかわかりません. 私は休止状態が初めてなので、ファイルを最初から書き込むための知識ベースはまだありません。誰かが私に洞察を提供できるなら、それは大歓迎です。お早めにどうぞ!
参考までに、エラーに記載されている 2 つのファイルを次に示します。
BID.JAVA
ITEM.JAVA
hibernate - Hibernate inverse=''true" と 1 対多を取得する際の問題
次のマッピングを使用しようとしています:
ただし、inverse が true に設定されている場合、アイテムのセットは常に空です。ただし、逆を false に設定すると、正常に動作します。私は何かを逃したようです。どんな説明でも大歓迎です。
追加した:
遅れて申し訳ありませんが、コードにいくつかの変更を加えましたが、まだ問題に直面しています: 3 つのアイテムを含むカテゴリをデータベースに保存していますが、そのカテゴリを取得すると、1 つのアイテムしか含まれていません。コードは次のとおりです。
前もって感謝します。
編集(著者のコメントによると、Stefan Steineggerによる)
テストケース:
spring - Spring Roo マスター/詳細 & @OneToMany
Spring Roo での @OneToMany アノテーションの問題 を参照すると、<field:select...ソリューションは create & update.jspx でうまく機能します。これをshow.jspxで機能させる方法はありますか?
java - Hibernate: @OneToMany 関係の最後の行をマップする
要素とその名前の間に関係があります。過去の名前と現在の名前はすべて、フィールド「created」を持つテーブル「element_name」にあります。最後に作成された行は、要素の現在の名前です。
要素の現在の名前を要素のプロパティとしてマップするにはどうすればよいですか?
前もって感謝します!
performance - 1 対多の双方向のパフォーマンスの問題
1 つ疑問があります。それは、1 対多を双方向として作成する場合です。子クラスに 1 つの親クラス参照を配置します。
コードを参照してください。
Person.java
アドレス.java
ここでPerson.javaは親クラスで、Address.javaは子クラスです。データベースから親オブジェクトを取得すると、子クラスがロードされます。それは結構です。問題ありません。
しかし、その逆です。子クラスを取得している場合は、親クラス(person)も保持しています。
例: アドレス ID で Address をフェッチします。データベースから 100 件の住所を取得したと仮定します。
しかし、アドレス クラスのperson変数では、親 (Person) オブジェクトも保持します。
私の疑問はここにあります
人によって使い分けられる100個のメモリー です。同じデータで。Address クラスで。?
私のダオはこんな感じです。
addrssList のサイズが 100 であると仮定します。
お気に入り
ここで、per1、per2 .... および per 99は同じメモリを使用しているか、異なるメモリを使用しています。
同じ場合は問題ありません..そうでない場合、メモリ使用率が高くなるという問題が発生する可能性があります.?
助けてください...
parent-child - 子テーブルに基づく 1 対多の切り離された基準の親テーブルのフェッチ
休止状態を使用した 1 対多のマッピングで 1 つの問題があります。
PersonとAddressの 2 つのクラスがあります。Person は Address (1 対多) によってマップされます。Address = "xxxx"; のすべての Person を取得します。DetachedCriteriaを使用してこのクエリを準備する方法。以下に、dao クラスのコードを追加しました。それを完了するのを手伝ってください。
Person.java
アドレス.java
私のDAO
select * from person where Address.address = "xxxx"; DetachedCriteriaを使用してこれを実装する方法は ?
java - Hibernate@OneToManyリレーションシップマッピング
「ユーザーAがユーザーBをフォローしている」、「ユーザーAがユーザーBの友達になりたい」など、ユーザーとユーザーの関係を設計しようとしています。
Userクラスがあり、その設計方法は次のようになります。
私は2つの問題に直面しています:
- Hibernateは、複数のバッグを同時にフェッチできないという問題を私に与えています
- オンラインで調べたところ、FetchType.EAGERを削除するか、ListではなくSetに変更すると言われましたが、Fieldにデフォルト値がありません。
関係が適切に定義されていないように感じます。また、現在、UserテーブルとUser_Userテーブルしか表示されていないため、さらに多くのテーブルが表示されるはずです。
アップデート
以下は、3つのテーブル、友達、フォロワー、およびリクエスターを作成します。これは5つのテーブルと比較していくらか最適化されていますか?そして、J4mes氏が提案したものと比較して、これに何か利点はありますか?