問題タブ [hibernate-annotations]
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.
jpa - 複合キーでエンティティを結合する
@EmbeddedId
複合キーを持つレガシーデータベース用の2つのエンティティがあり、そのうちの1つには注釈付きの複合キーがあります。
@OneToOne
次の例のように、結合する関係をどのように定義する必要がありますか。
java - Hibernate @Id @GeneratedValue アノテーションが、DB2 データベースによって生成されたインクリメント ID を認識しない
Hibernate 3 を使用して DB2 v9.x に 2 番目のレコードを挿入すると、DB2 によって生成された一意の主キー列 ID を持つ列が、Hibernate エンティティの永続化では機能しません。
最初のレコードの挿入は正常に機能しますが、セッターを使用して手動で値をインクリメントして設定しない限り、それ以上のレコードを永続化することはできません。@GeneratedValue をコメントアウトしようとしました....これを正しく使用していますか? Hibernate に Id 列を自動インクリメントさせたくありません。DB2 自体によって生成されたインクリメントされた ID を使用して、次の行を挿入したいと考えています。ありがとう:)
これは私のコードです:
Id を生成するために DB2 create table スクリプトに追加された制約:
これは例外です:
Hibernate: RPS.TMRT に挿入 (MRT_APRNUM、MRT_CHKLOC、MRT_DPTCDE、MRT_FUNCDE、MRT_MDCNUM、MRT_MDCRSLCDE、MRT_MDCRSLDTE、MRT_OCCCDE、MRT_QIDNO、MRT_REGDTE、MRT_REMARK、MRT_SECCDE、MRT_SMP、MRT_USRID、MRT_VISNUM、MRT_APLYER ?、MRT_APLYER NUM、MRT_APLYER ? ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) 15-Mar-2011 17:37:44 org.hibernate.util.JDBCExceptionReporter logExceptions警告: SQL エラー: -803、SQLState: 23505 15-Mar-2011 17:37:44 org.hibernate.util.JDBCExceptionReporter logExceptions SEVERE: DB2 SQL エラー: SQLCODE: -803、SQLSTATE: 23505、SQLERRMC: 1;RPS。 TMRT 15-Mar-2011 17:37:44 org.hibernate.event.def.AbstractFlushingEventListener performExecutions SEVERE: データベースの状態をセッション org.hibernate.exception.ConstraintViolationException と同期できませんでした: 挿入できませんでした: [qa.gov.moi.rps .db.エンティティ。Medical_MRT] org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:71) で org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43) で org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister) .java:2272) org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2665) で org.hibernate.action.EntityInsertAction.execute(EntityInsertAction.java:60) で org.hibernate.engine.ActionQueue。 org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:263) で実行 (ActionQueue.java:279) org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:167) で org.hibernate.event.def org.hibernate の .AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:298)。event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:27) org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1000) org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:338) org .hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:106) の org.hibernate.ejb.TransactionImpl.commit(TransactionImpl.java:54) の qa.gov.moi.rps.db.helper.MedicalHelper.create(MedicalHelper) .java:74) で qa.gov.moi.rps.db.helper.MedicalHelper.main(MedicalHelper.java:285) で sun.reflect.NativeMethodAccessorImpl.invoke0(ネイティブ メソッド) で sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl) で.java:39) で sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) で java.lang.reflect.Method.invoke(Method.java:597) で com.intellij.rt.execution.application.AppMain.main(AppMain.java:115) 原因: com.ibm.db2.jcc.c.SqlException: DB2 SQL エラー: SQLCODE: -803、SQLSTATE: 23505、SQLERRMC: 1; com.ibm.db2.jcc.c.fg.d(fg.java:1340) の RPS.TMRT (com.ibm.db2.jcc.b.gb.k(gb.java:351) の com.ibm)。 com.ibm.db2.jcc.bwa(w.java:52) の db2.jcc.b.gb.a(gb.java:60) com.ibm.db2.jcc.b.wb.c(wb. java:213) com.ibm.db2.jcc.c.gg.ab(gg.java:1779) com.ibm.db2.jcc.c.gg.d(gg.java:2324) com.ibm .db2.jcc.c.gg.W(gg.java:457) の com.ibm.db2.jcc.c.gg.executeUpdate(gg.java:440) の org.hibernate.jdbc.NonBatchingBatcher.addToBatch(NonBatchingBatcher) .java:23) at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2252) ... 18 さらに javax.persistence.RollbackException:qa.gov の qa.gov.moi.rps.db.helper.MedicalHelper.create(MedicalHelper.java:74) の org.hibernate.ejb.TransactionImpl.commit(TransactionImpl.java:71) でトランザクションをコミット中にエラーが発生しました。 moi.rps.db.helper.MedicalHelper.main(MedicalHelper.java:285) の sun.reflect.NativeMethodAccessorImpl.invoke0(ネイティブ メソッド) の sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) の sun.reflect. DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at com.intellij.rt.execution.application.AppMain.main(AppMain.java:115) : org.hibernate.exception.ConstraintViolationException: 挿入できませんでした: [qa.gov.moi.rps.db.entity.Medical_MRT] at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:71) org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2272) で org.hibernate.persister.entity.AbstractEntityPersister で org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43) で.insert(AbstractEntityPersister.java:2665) org.hibernate.action.EntityInsertAction.execute(EntityInsertAction.java:60) org.hibernate.engine.ActionQueue.execute(ActionQueue.java:279) org.hibernate.engine. ActionQueue.executeActions(ActionQueue.java:263) org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:167) org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:298) org.hibernate .event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:27) org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1000) で org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:338) で org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java) :106) at org.hibernate.ejb.TransactionImpl.commit(TransactionImpl.java:54) ... さらに 7 原因: com.ibm.db2.jcc.c.SqlException: DB2 SQL エラー: SQLCODE: -803、SQLSTATE : 23505、SQLERRMC: 1; com.ibm.db2.jcc.c.fg.d(fg.java:1340) の RPS.TMRT com.ibm.db2.jcc.b.gb.k(gb.java: 351) com.ibm.db2.jcc.b.gb.a(gb.java:60) com.ibm.db2.jcc.bwa(w.java:52) com.ibm.db2.jcc.b .wb.c(wb.java:213) at com.ibm.db2.jcc.c.gg.ab(gg.java:1779) at com.ibm.db2.jcc.c.gg.d(gg.java) :2324) com.ibm.db2.jcc.c.gg.W(gg.java:457) com.ibm.db2.jcc.c.gg.executeUpdate(gg.java:440) org.hibernate.jdbc.NonBatchingBatcher.addToBatch(NonBatchingBatcher.java:23) で org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2252) ... 18 もっと見る
java - リストからアイテムを削除する方法を休止状態にする
リストが休止状態でどのように管理されるかを理解するといういくつかの課題に直面しています。
私は次の投稿を見てきました: リストからアイテムを削除する休止状態は持続しませんが、それは役に立ちませんでした。
したがって、ここに親があります:
ここに子供がいます
public class MaterialAttribute extends MappedModel 実装 Serializable
したがって、私の Service クラスでは、次のことを行っています。
したがって、上記のセットアップでは、最初にデータベースにすべてが正しく作成されます。2 回目は、コレクション内の最初のアイテム セットが削除され、新しいアイテムのみがデータベースに追加されると予想していました。それは起こりませんでした。子の元のアイテムは新しいアイテムとともにそこにあり、seq 番号は再び 0 から始まります。
また、次のエラーが表示されます
org.hibernate.HibernateException: cascade="all-delete-orphan" を持つコレクションは、所有エンティティ インスタンスによって参照されなくなりました:
何が欠けていますか。
hibernate - オブジェクト名「ACCOUNT_orders」が無効ですか? 注釈付きの Spring-MVC Hibernate の質問
私は休止状態が初めてです。DBに注文とアカウントのテーブルがあり、
アカウント テーブル:
1 つのアカウントに多くの注文がある 1 対多のマッピングを実行しようとしています。私は次のクラスを持っています:
注文クラス:
しかし、次の HQL を使用して HibernateTemplate の List メソッドにアクセスしようとすると:
それは私に次の例外を与えます:
お願い助けて。前もって感謝します。
java - Hibernate で事前計算された平均値を計算して保存する
製品のセットがあり、各製品にはレビューのセットがあるとします。各レビューにはスコアがあります。実際のレビューが必要になるよりも、はるかに頻繁にスコアの平均が必要になります。平均を事前計算して休止状態で保存するためのベストプラクティス/クリーンな方法はありますか?
現在、商品テーブルにレビュー数とレビュー合計の列を追加し、add review メソッドを操作してカウントと合計を更新することを考えています。
これを行うためのよりクリーンな方法を聞いてとてもうれしいです。
hibernate - Hibernate で遅延読み込みを無効にする
Hibernate で遅延読み込みを無効にするにはどうすればよいですか? hbm xml ファイルではなく、持続性アノテーションを使用しています。
ID で 1 つのオブジェクトをフェッチしており、すべてのプロパティをロードしたいと考えています。オブジェクトを使用する前にセッションが閉じられます。
ありがとう!
java - Hibernate-抽象ではないクラスにどの継承戦略を使用する必要がありますが、サブクラスにはテーブルが必要ない場合があります
私のプロジェクトには単純な継承関係があり、スーパークラスを抽象化したいと思っています。継承するクラスの中には、追加のデータベース情報を必要とするものもありますが、そうでないものもあります。どの継承戦略を使用するかわかりません。
スーパークラスがJOINED戦略で抽象クラスを持つことができるということについて、私は正解を見つけることができないようです。
サブクラスの数が多くなりすぎないように思われます。また、サブクラスのいずれにも多くの追加データがないはずなので、おそらくSINGLE_TABLEで十分です。
理由もなく余分なテーブルを作成したくないので、TABLE_PER_CLASSは不適切です。
ご指導をいただければ幸いです。
ありがとう
hibernate - Hibernate、SpringWebサービストランザクションの問題
2つのアプリケーションがあります。1つはOrderServiceで、もう1つはTradeServiceです。貿易サービスには、トランザクションである「購入」メソッドがあります。
TradeServiceがWebサービスを使用してOrderサービスのSubmitOrderメソッドを呼び出すと問題が発生します。
問題の説明:
Buyメソッドのすべてのステップは1つのトランザクションの下にあります。
Buyメソッドを呼び出すと、1つのOrderオブジェクトが作成されます。
このメソッドがWebサービスを使用してSubmitOrderメソッドを呼び出すと、注文IDが渡されます。
Submit Orderメソッドは、このIDを使用してDBからOrderObjectをロードします。
ただし、Loadメソッドでは、レイジー初期化例外が発生します。セッションが閉じられます。(両方のアプリケーションが同じデータベースを共有します)
これに対する考えられる解決策は、SubmitOrderメソッドをトランザクション化することです。
別のデッドロックの問題が発生します。
- デッドロックの理由、A。Buyメソッドは「xyz」と言うIDで注文オブジェクトをロックします。同じIDを送信して注文方法を送信します。B.現在、Buyメソッドは送信注文からの応答を待っています。C.オーダー送信メソッドは、購入メソッドによってすでにロックされているため、オーダーオブジェクトをロードできません。D.したがって、SubmitOrderメソッドはロックの取得を待機しています。したがって、デッドロック状態です。
注:どちらのアプリケーションも、Spring MVC、Spring Web Service、およびHibernateを使用します。
この状況から私を助けてください。よろしくお願いします(必要に応じてコードの一部を投稿できます)
hibernate - sessionFactory.getCurrentSession() の休止状態フィルターを有効にする方法は?
次の構造の User テーブルがあるとします。
ユーザー
- リスト項目
- ユーザー ID (PK)
- 会社 (PK)
- ユーザー名
- 住所・・・など
そして、現在の会社のユーザーのみを取得したい (会社は UI を介してユーザーが変更できるため、会社はランタイムパラメーターです)
同様に、共通の列 (会社) を持つ同様の構造を持つ他の多くのテーブルがあり、データを現在の会社のみに制限したいので、休止状態フィルターを使用してデータをフィルター処理しています。
休止状態の注釈:
フィルター定義:
ダオの:
getSession をそのように変更すると;
次に、フィルターを有効にすると、すべてがうまく見えますが、セッションの取得中にフィルターを有効にする代わりに、セッションファクトリー/アプリケーションレベル全体にフィルターを適用して有効にする簡単な方法はありますか? もしそうなら、どうすれば春の設定を使ってそれを行うことができますか?
Hibernate インターセプター (プリロード イベント リスターン) にフックしようとしましたが、これが正しいアプローチなのか、それとも上記の getSession メソッドを使用してフィルターを有効にするべきなのか、少しわかりません。
java - FK id がまだ作成されていないため、hibernate @ManyToOne は適切な挿入に失敗します
クラス Order には、次のプロパティがあります。
クラス OrderLine には、次のプロパティがあります。
DB では、orderline は単に注文を指す FK を持っています。そして問題はここから
自動生成に設定されているため、ID なしで Order オブジェクトを手動で作成し、適切な DAO を使用して保存します。order テーブルは正しく入力されていますが、orderline テーブルは正しくありません。
orderline テーブルの order の FK フィールドは空白のままです。挿入の時点で注文IDにまだIDがないためだと思います。
これを修正する簡単な方法はありますか?