問題タブ [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.

0 投票する
0 に答える
501 参照

hibernate - OneToMany Fetch で maxResults を Hibernate すると、子が結果行としてカウントされます

別のクラス Comment への OneToMany 注釈を持つクラス Video があります。

クエリで setMaxResults(4) を設定して、最後の 4 つのビデオのみを取得することを望んでいます。どの動画にもコメントが存在しない場合、これはうまく機能します。ただし、ビデオごとに複数のコメントを指定すると、クエリは 4 つ未満のビデオを返すようになりました (フェッチされた行を maxResult としてカウントすると思います)。

クエリで 4 つの動画すべてが返されるようにするにはどうすればよいですか?

私は電話しています

0 投票する
0 に答える
333 参照

hibernate - ElementCollectionに変換するHibernateMappingException

非推奨のCollectionOfElementsの代わりにJPAElementCollectionを使用するようにコードをリファクタリングする際に問題が発生しました。次のスタックトレースが表示されます。

org.hibernate.MappingException:次のタイプを判別できませんでした:java.util.Set、テーブル:UserFilter、列:[org.hibernate.mapping.Column(element)] at org.hibernate.mapping.SimpleValue.getType(SimpleValue .java:292)at org.hibernate.mapping.SimpleValue.isValid(SimpleValue.java:276)at org.hibernate.mapping.Property.isValid(Property.java:207)at org.hibernate.mapping.PersistentClass.validate( PersistentClass.java:458)at org.hibernate.mapping.JoinedSubclass.validate(JoinedSubclass.java:63)at org.hibernate.cfg.Configuration.validate(Configuration.java:1149)at org.hibernate.cfg.Configuration.buildSessionFactory (Configuration.java:1334)org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:867)

UserFilterで変更されたコードは次のとおりです。

下位互換性のために、結合テーブル名と列名を指定しています。

0 投票する
2 に答える
318 参照

spring - Hibernate: 2 つの異なる ManyToOne 関係を持つ子テーブル

私が書いているSpring/Hibernate/Java/Tomcatアプリでは、組織とその連絡先の間にOneToMany関係があります。

組織 1:M 連絡先 (外部キー org_id を持つ)

組織には、次のフィールドがあります。

連絡先には、次のフィールドがあります。

これまでのところ、すべて正常に機能しています。今、オファーの概念を追加しています。オファーは組織によって行うことができ、その特定のオファーについて指定された連絡先と話します。

オファーには、その組織 (org_id) および指定された連絡先 (contact_id) の外部キーがあります。

これまでのところ、オファーは次のようになります。

これが私の質問のポイントです。Organization で使用するために Contact クラスにすでに注釈を付けました。通常の Hibernate の方法で Offer オブジェクトを永続化しようとすると、Organization オブジェクトと Contact オブジェクトのコピーを Offer オブジェクトに保存する必要があります。これは、私の既存の組織と競合しているようです: 2 つの Java クラスの連絡先の使用。たとえば、Offer で 1 対 1 を使用している場合、これを Contact クラスに入れると、どちらかをオプションで使用できますか、それとも両方を同時に使用する必要がありますか?

オファーはもう 1 つの関係であるため、オファー関係で使用する Contact のデータ転送オブジェクト バージョンを作成する必要がありますか?

ありがとう、ジェローム。

0 投票する
2 に答える
1946 参照

hibernate - 親が削除されたときに、子がその更新を削除するのではなく

私の問題は、親を削除すると、子は削除されませんが、子を削除する代わりに、子が更新されます。親テーブルEmployeeと子テーブルEmployeeProjectには、従業員とプロジェクトの間に1対多の関係が存在します。1人の従業員が多くのプロジェクトを持っていました。私はこれがコンソールに表示されているクエリであると誤解している場所を確認してください

これが削除のロジックです

これは、親テーブル マッピング ファイル Employee.hbm.xml です。

これは、子テーブル マッピング ファイル project.hbm.xml です。

0 投票する
1 に答える
1558 参照

hibernate - 主キー以外の Hibernate との @OneToMany 関係

Team という名前の@Entityが 1 つあります。

別の Bean 名があるProjects like

正常に動作しますが、問題は project_participants テーブルに project_id と Team テーブルの ID があることです。しかし、Team テーブルの project_id と Employees_id が必要です。 project_participants テーブルは次のとおりです。

ここに画像の説明を入力

参加者テーブル * ここに画像の説明を入力

最後に、project_participants テーブルにproject_project_idparticipants_id ( team_id ではない) が必要です。事前に感謝します。

0 投票する
1 に答える
3200 参照

hibernate - JPA ネイティブ クエリの結果が重複する子オブジェクトを返す

DB に親テーブルと子テーブルがあり、対応するエンティティ クラスに OneToMany マッピングがあります。子テーブルには外部キーのparent_idがあります。Hibernate と MySQL DB で JPA 2 を使用しています。

SQL ネイティブ クエリを使用して、親プロパティに基づいて、すべての親オブジェクトとそれに対応する子オブジェクトを取得したいと考えています。

そのために、次のように SqlResultSetMapping があります。

次のように問い合わせています。

結果リストをたどると、出力に示すように、子テーブルの異なる行に重複する子オブジェクトが見つかりました。

出力:

これがなぜなのかわかりません。ネイティブ クエリを使用してすべての (異なる) 子オブジェクトを取得する (マッピング) 方法はありますか。列名を使用したフェッチは機能し、対応するオブジェクト マッピングは必要ありませんが、子テーブルのすべての列をフェッチしたいので、SQL クエリで c.* を使用することをお勧めします。

0 投票する
2 に答える
4774 参照

java - Hibernate が 1 つの選択で 2 つのレベルのセットをフェッチすることは可能ですか?

私は3つのエンティティを持っています:

JPA の Criteria API を使用して特定の A を取得すると、Hibernate は最初に A のみを取得し、次に各 A について、すべての B を取得し、最後に各 B についてすべての C を取得します。

理論的には可能である 1 つの選択でフェッチを強制することは可能ですか?

0 投票する
1 に答える
2964 参照

java - JPA、insertable=false、updatable=false を望まない、回避策?

私はstackoverflowとJPAの両方に慣れていないので、これをできる限り説明しようとします。

エンティティでは、int 値を指定して外部キーを設定したいだけでなく、オブジェクトを指定して設定したいと考えています。これをよりよく説明するためのコードを次に示します。

いくつかの方法を試しましたが、上記のコードは私が達成しようとしているものの最良の例です。2 つの方法のいずれかで、insert = false および update = false に設定すると、このコードがコンパイルおよび実行できるようになることを理解しています。しかし、Account オブジェクトを使用し、実際の int accountId を設定して、accountId を挿入できるようにしたいと考えています。

この理由は、私のサーバーでは、accountId しか持っていないこともあれば、Account オブジェクトを持っていることもあるためです。

また、スレッドを作成して accountId を設定するときに account.getId() を使用するのがおそらく最善の解決策であることも理解しています。しかし、私のサーバーでは、オブジェクトをそのまま使用できるのは論理的には良いことです。

前もって感謝します!

0 投票する
2 に答える
1064 参照

java - 1 対多の関係にある子は削除できません

に入れるinverse=trueset、何も削除されません。そうしないと、 から削除するMealIngredientset、Hibernate は を設定しようとしnullますが、失敗し、例外がスローされます。

XML マッピングは次のとおりです。

Mealはい、との関係はIngredient結合テーブルを使用した多対多です (そして、そのテーブルに追加の列があるため、同様MealIngredientにマップする必要があります)。MealIngredient

この質問は私を助けませんでし

編集:挿入のみが現在のマッピングで機能し、更新はMealIngredientテーブルに別の行を生成するだけです。


編集2: hashCodeおよびequals実装:

MealIngredient$Id : (Apache commons-lang EqualsBuilderおよびHashCodeBuilderを使用)

食事成分:

ログを確認しましたが、Hibernate が内部で何をしているのかはわかりませんが、次のようにinsertなりMealIngredientます。

MealIngredientそして、から削除するとMeal.ingredientsSet、Hibernate は次updateのように設定しようとしmealIdますnull

0 投票する
1 に答える
232 参照

java - Javaでも双方向関係を更新する必要がありますか?

エンティティがUserありGroup、それらの間に 1 対多の関係を持たせたいとします。つまり、それぞれUserが 1 つの に属しますがGroup、 any には複数のGroupが含まれる場合がありますUser

グループ エンティティ:

およびユーザーエンティティ:

以下は、アプリケーション コードです。

残念ながら、getUser()常に戻りnullます。なんで?関連ユーザーの代表として設定されていませんか?私が間違っていることは何ですか?

自分でコレクションの同期を行う必要がありますか? Hibernate はフィールドを自動的に埋めませんか?

更新 1

私の休止状態の設定は次のとおりです。

の追加

役に立ちませんでした。

更新 2

追加する

役に立ちませんでしたgetUsers()。それでも null を返します。