問題タブ [many-to-one]
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 - 多対一の関連付けのための Hibernate L2 キャッシング
私は休止状態に慣れていないので、ehCache を使用して第 2 レベルのキャッシュを実装しようとしています。L2 キャッシュを使用して多対 1 の関連付けを取得しようとすると、問題が発生します。私の foo.hbm.xml ファイルの関連付けマッピングは次のようになります。
(これは、私の実際の hbm.xml ファイルの非常に短縮/変更されたバージョンです。エラーがないことを願っています)
「foo」ではなく「bar」のみをキャッシュしていることに注意してください。ただし、このマッピングで単体テストを実行すると、次のエラーが発生します。
SEVERE: XML の解析エラー: XML InputStream(40) 要素タイプ「多対 1」のコンテンツは、「(meta*,(column|formula)*)」と一致する必要があります。
私が取り出したとき、それはうまく動作します.L2キャッシュはありません. 多対一の関係がキャッシングをサポートしていないということですか? もしそうなら、これを回避する方法についての提案はありますか?
参考までに、「バー」を直接(つまり、関連付けを介してではなく)読み取る別の単体テストがあり、正しく機能します.2回目に「バー」を取得すると、L2キャッシュから取得されるため、残りの構成は正しく行われました。申し訳ありませんが、まだ石器時代に働いているため、注釈などはありません.
jpa - Eclipselink は、多対 1 の関係で予期しない挿入を実行します
私は2つのオブジェクトの間に非常に基本的な関係を持っています:
DB には StatusOfA の限られたセットしかありません。
トランザクションで A を更新します。
saveOrPersistA メソッドはここで「a」をマージしています。
私は、Eclipselink が StatusOfA を更新するために 'a' に対してのみ更新を実行することを期待していますが、StatusOfA テーブルに対して新しい挿入を実行しています。Oracle は、一意の制約違反が原因で不平を言っています (Eclipselink が永続化しようとする StatusOfA は既に存在します...)。ここにはカスケードがないため、問題はなく、Hibernate (JPA2) は例外として動作しています。
同じプロジェクトで、私はすでにいくつかのより複雑な関係を作成しましたが、ここでの関係が機能していないことに本当に驚いています。
よろしくお願いします。
java - JPA多対一関係の削除操作
ExternalProcessed ファイルを削除したいのですが、同じ ExternalProcessedFileInfo がありますが、このクエリは失敗します。リレーションが @onetomany に戻り、削除時にカスケードされると簡単ですが、ManytoOne リレーションの有用な例が見つかりませんでした。
これは実行したいコードで、 select query に対して実行されます。
java - JBossEnversManyToOne監査
仮説シナリオ:2つのモデルがあります:Author
とBook
。モデルには、のBook
多対1の関係がありAuthor
ます。
への変更のみを監査したいとしBook
ます。クラスに。という注釈を付けましたが、が監査されていないため、のプロパティを監査できない@Audited
というエラーが発生します。getAuthor()
Book
Author
どうしてこれなの?本の著者が変わったかどうかを監査したいのですが、著者のニックネームが変わってもかまいません。データベースにテーブルを含めることは意味がありませんが、先に進んでモデルを監査するか、関係を無視するためにプロパティでプロパティに注釈を付けるまで、author_aud
これは明らかに不可能です。ただし、これを行うと、本と著者の関係を監査できなくなります。Author
getAuthor()
@Audited(...)
c# - NHibernate2.1.2未保存の一時インスタンス
多くの質問と回答を読みましたが、問題の解決策を見つけることができませんでした。この問題は、NHibernate1.2.1から2.1.2に移行したときに発生します。この一般的なエラーがあります:
オブジェクトは保存されていない一時インスタンスを参照します-フラッシュする前に一時インスタンスを保存します。タイプ:Mikro.FareOn.Modules.Cards.Interface.BEC.CRResidenceRegion、エンティティ:Mikro.FareOn.Modules.Cards.Interface.BEC.CRResidenceRegion
メインクラスCRResidenceのマッピング:
そして、多対多の関係にあるクラスの1つ:
クラスCRResidenceRegionの実装:
すべてのタイプのカスケードを試しましたが、どのカスケードも正しく機能しません。しかし、私の機会では、cascade="none"を好みます。クライアント側があり、1つのNHibernateセッションでサーバー側のメソッドを呼び出してオブジェクトCRResidenceRegionをロードします。ロード後、NHibernateセッションは閉じられます。クライアント上のオブジェクトが正しい、データベースからのIDが正しいなど。次に、CRResidenceオブジェクトにCRResidenceRegionオブジェクトが割り当てられます。次に、サーバー側でメソッドと呼ばれます。
私はこのようなオブジェクトをたくさん持っていますが、この問題はNHibernate2.1.2に移行したときに発生しました。カスケードスタイルを定義した後、正常に機能する場合もあります(必要に応じて、「すべて」と同様に「なし」が機能しました)。NHibernateの設定ファイルに問題がある可能性があります。
問題の以前の定義:CRResidenceのインスタンスを挿入または更新しようとすると、未保存の一時エラーに関するエラーが発生します。CRResidenceRegionのインスタンスはIdを含めて完全に初期化されているため、問題はありません。IdにEqualメソッドを実装しました。キャッシュをクリアしようとしましたが、役に立ちませんでした。カスケードをsave-updateに変更すると機能しますが、CRResidenceRegionのレコードが複製されます。1つの解決策は、CRResidenceを保存する前に、同じセッションでデータベースからCRResidenceRegionを読み取ることです(以下のコードでコメントされています)が、これは受け入れられません。
NHibernateはCRResidenceRegionへの参照を適切に失い、新しく作成されたと考えているようですが、そうではありません。
java - ManyToOne関係で孤立した削除を強制する方法
ManyToOne関係で孤立した削除を強制する方法、上記のコードスニペットはHibernate 3.3.xで機能しましたが、3.6.5.Finalへの移行後、コードに警告として表示されます。@OneToMany表記に適用されるorphanRemoval=trueのような同等のフラグはありますか?
java - 挿入時に不要な選択を防ぐ方法は?
次のシナリオがあります(Java / Hibernateで):
- X と Y の 2 つのエンティティ クラスがあります。X には、カスケードされていない Y への @ManyToOne 関連付けがあります。
- X の (管理されていない) インスタンス x と Y の (管理されていない) インスタンス y を作成し、y への参照を x に入力します。埋められる y の唯一のフィールドは主キーです。
- エンティティ y は、基になるデータベースに対応する行が既にありますが、エンティティ x は新しいものです。
- エンティティ x を永続化します。
このシナリオを実行すると、INSERT x という 1 つのクエリが表示されることが予想されます。ただし、実際には、Hibernate が 2 つのクエリを実行します。
- yを選択
- ×を挿入
さらに、x の永続化の後、y への参照が実際には管理されず、セッションに Y のインスタンスがないことにも気付きました! では、なぜ y に対する SELECT が実行されるのでしょうか? この動作を防ぐ方法はありますか?
jpa - OneToMany 関係の JPA クエリを構築する
私はそれらの2つのエンティティを持っています
1) 名前が ="mohamede1945" の B が少なくとも 1 つあるすべての A を取得するというクエリを作成したいと思います。
2) name = "mohamede1945" の B を持たないすべての A を取得するというクエリを作成したいと思います。
誰でも私を助けることができますか?
java - Hibernate @ManyToOne は片側でエントリを削除し、多側で FK を NULL に設定します
私は Hibernate で作業することを学ぼうとしていますが、おそらく私は@ManyToOne
逆の関係を理解していません。と の 2 つのエンティティがAuthor
ありDepartment
ます。1 人の著者には 1 つの部門があり、1 つの部門には複数の著者がいます。
Author を削除しても、Department には何も起こらないはずです。Department を削除すると、Author のテーブルの FK がNULL
値に更新されます (Author は削除されません)。
私は反転の素晴らしい説明を見つけ、それAuthor
が所有側であることがわかりました。このスレッドによると、子 (部門) を削除すると、FK を に設定する必要がありますNULL
。しかし、Department だけが削除され、FK が Author テーブルに残っているため (これが につながります)、それは起こりませんorg.hibernate.ObjectNotFoundException: No row with the given identifier exists
。
エンティティの注釈に追加CascadeType.REMOVE
すると、部門に関連付けられているすべての作成者も削除されます。前述の状態はどちらも望ましくありません。Department を削除し、Author テーブルの FK を に設定したいだけです。どうやってするか?@OneToMany
Department
NULL
Author
およびDepartment
注釈付きのエンティティ:
前もって感謝します
hibernate - Hibernateでの多対1の関係
データベースの2つのフィールド間で多対1の関係を確立したいと思います。PostgreSQLデータベースとHibernateを使用しています。テーブルはApplicationFieldとDeviceです。最初の列には、AppFieldIdとNameの2つの列があります。2つ目は、NodeId、Description、およびAppFieldIdを持っています。ApplicationFieldのHibernateマッピングは次のとおりです。
そしてデバイスの場合:
Javaクラスでは、ApplicationFieldクラスにListデバイスがあり、DeviceクラスにApplicationFieldappFieldがあります。ただし、sessionFactoryを作成しようとすると、次のような例外が発生します。
テーブル間の関係はどのようにすればよいですか?
どうもありがとう!!