問題タブ [hibernate-mapping]
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 でローカライズされた文字列をマッピングする - ベスト プラクティスはありますか?
すべての String プロパティをローカライズする必要があるアプリケーションを作成しています。つまり、利用可能なロケールごとに異なる値を格納する必要があります。簡単な解決策は Map を使用することです。これは Hibernate で簡単にマップできますが、Java プログラマーには適していません。
そこで、ロケールごとに異なる文字列を保持できる LocalString オブジェクトを実装しました。
ドメイン オブジェクトは次のようになります。
これらのオブジェクトを Hibernate アノテーションで最適にマッピングするにはどうすればよいですか?
LocalString をコンポーネントとして使用すると、最適なマッピングが行われると思います。
...
hbm2ddl ant タスクは、"Products" テーブルと、キーと値の列を含む "Products_localStrings" テーブルの 2 つのテーブルを作成します。2 番目のプロパティのゲッターを追加すると、すべてが壊れます。
2 番目のプロパティはスキーマに表示されません。@AttributesOverride タグを使用して 2 つの列に異なる名前を定義しようとしましたが、生成されたスキーマは正しくありません。
生成されたスキーマでは、キー列が消えており、主キーに「説明」が使用されていますが、これは正しくありません。
これを修正する方法はありますか?
LocalString をエンティティとして使用して、埋め込みコンポーネントを使用しないほうがよいでしょうか?
代替デザインはありますか?
ありがとうございました。
編集
xml マッピングを試してみたところ、適切なスキーマを取得できましたが、休止状態が 1 つではなく 2 つの挿入を生成するため、挿入は主キー違反で失敗します
スキーマは
ログ:
次のような単一の挿入のみを生成するように休止状態に指示するにはどうすればよいですか?
2011.Apr.05 編集
2 つの問題に遭遇するまで、しばらく (@ElementCollection で注釈を付けて) Map ソリューションを使用してきました。
- 現在の Criteria API は埋め込みコレクションでは機能しません: http://opensource.atlassian.com/projects/hibernate/browse/HHH-3646
- 現在の Hibernate Search (Lucene) API は、埋め込みコレクションでも機能しません: http://opensource.atlassian.com/projects/hibernate/browse/HSEARCH-566
Criteria の代わりに HQL を使用したり、独自の FieldBridge を定義して Lucene でマップを処理したりするなど、多くの回避策があることは知っていますが、回避策は好きではありません。次の問題が発生するまで機能します。だから私は今このアプローチに従っています:
ロケールと値を保持するクラス "LocalString" を定義します (ロケールは実際には ISO3 コードです)。
次に、ローカライズしたいプロパティごとに、空の LocalString のサブクラスを定義します。
これで、Product オブジェクトで使用できます。
このアプローチでは、ローカライズする必要があるプロパティごとに空のクラスを作成する必要があります。これは、そのプロパティの一意のテーブルを作成するために必要です。利点は、条件と検索を制限なく使用できることです。
hibernate - Hibernateでのコンポーネントコレクションの一括挿入?
以下のようなマッピングがあります。
デタッチされたCategoriesアイテム(dtoコンバーターからのHibernateクラスを含まない)を更新すると、Hibernateが最初にすべての雇用者賃金インスタンス(コレクションリンク)を削除し、次にすべての雇用者賃金エントリを1つずつ挿入することに気付きました。 -1 :(...
完全に切り離されたため、すべてのエントリを削除してから挿入する必要があることを理解しています。
しかし、私が理解していないのは、なぜHibernateが一括挿入ですべてのエントリを挿入しないのですか?..つまり、すべての雇用主の賃金エントリをすべて1つのSQLステートメントに挿入するのですか?
Hibernateに一括挿入を使用するように指示するにはどうすればよいですか?(もし可能なら)。次の値で遊んでみましたが、違いは見られませんでした。
私のマッピングスニペット:
hibernate - Hibernate は再接続されたコレクションを挿入しませんか? (バグ?)
バージョン: 3.6.0.final
次のような状況があります: カスケードが完全に有効になっている、値型オブジェクトを含むコレクションを持つエンティティ。
1)コレクションを削除して、データベースに保存します。次に、それをロードして、コレクションが実際に削除されていることを確認します。2) 次に、削除されたコレクションを追加し、エンティティを再度保存します。次に、再度ロードして結果を確認し、コレクションが空であってはならないことに気付きます:(...何が間違っているのですか、それともバグですか? 2)でクリーンに作成されたコレクションを使用すると、 Hibernate オブジェクトが存在しません。正常に動作します。つまり、コレクションはデータベースに正しく格納されます。
コードでは、私のマッピング:
コード:
いくつかのエントリで新しいセットを作成して保存すると、すべて正常に動作しますが、PersistSet などの Hibernate オブジェクトを含む古い履歴を保存すると、db に保存されません...奇妙な... . これは予想される動作ですか?... バグのようなにおいがするか、ここに何かが欠けています...
Hibernate コードをデバッグすると、メソッド Collections.prepareCollectionForUpdate() でコレクション エントリが更新/再作成としてマークされることはありません。これは、loadedPersister と currentPersister が何らかの理由で同じであるためです...
誰かアイデアはありますか?
hibernate - HQLクエリのヘルプが必要
次のように、 Personという単純なクラスがあります。
そして、各PersonStateは次のように定義されます。
また、Stateは、 IDと名前のみを含む単純なクラスであり、すべてのマッピングファイルを構成して機能させています。
最後のPersonState (日付に基づく)のStateがid = 5(たとえば)であるPersonを取得したいので、HQLクエリはどのようになりますか?ありがとう!
java - org.springframework.orm.hibernate3.HibernateQueryException - HibernateTemplate
HibernateTemplate に問題があり、どこが間違っているのかわかりません。Hibernate3 と Tomcat6 を使用しています。私のDAOには、文字列を使用してデータベースにクエリを実行しようとする関数があり、正常に動作しているようです。このような
それでも、整数を使用してクエリを実行しようとすると。お気に入り:
次のエラーが表示されます。
p>私のエンティティには必要な注釈があるようです。最初の機能で機能するので、2番目の機能で機能しない理由がわかりません。
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'" をマップするにはどうすればよいですか?
java - java、hibernate: クエリによるプロパティのマッピング
プロパティ「数量」を持つエンティティがあります。この値はテーブル フィールドではなく、hql クエリで動的に計算されます。
それで、エンティティにこの値を追加して、エンティティをロードするときに hibernate に計算させることは可能ですか?
java - 一時的なオブジェクトを使用して永続的なオブジェクトを作成します
私はこのような2つのマッピングを持っています:
これらはクラスです:
私は長い移行に対処し、次のことをしなければならないシナリオにいます:
これは別のレイヤーで発生します(ここではセッションにアクセスできません):
親オブジェクトを保存する前に永続的な子オブジェクトをロード/取得する方法はありますか、または情報を変更せずに子オブジェクトを保存してすべてをフラッシュする他の方法はありますか?JPAを使用していません。ひどく間違っていたらごめんなさい。
ありがとうございました。
hibernate - シーム休止状態削除孤立問題
エンティティEmployeeを使用していて、その中にUserMasterのリストが定義されています
私のメソッドでim呼び出し
ここでは、以前の子コレクションを明示的にクリアし、新しい子オブジェクトを追加します
しかし、ここでは孤立の削除は機能していません..挿入クエリのみが実行されていますPlsヘルプ
cascade = "all-delete-orphan"のコレクションは、所有するエンティティによって参照されなくなりました
メッセージがコンソールに表示されています
hibernate - 存在するかどうかにかかわらず、Hibernate を列にマッピングする方法はありますか?
テーブルの列が存在する場合と存在しない場合があります。簡単に言えば、実装されている場合、列をテーブルに追加するオプション機能があります。クライアントが機能を持たないことを選択した場合、列はありません。
列が存在しない場合に Hibernate が爆発しないことを期待して、DAO でプロパティを定義しようとしています。おそらく、値を に設定しますnull
。しかし、Hibernate は「無効な識別子」例外をスローしています。
あなたがこれを行うことができるかどうか誰かが知っていますか?列が存在する場合は Hibernate がデータを入力する列マッピングがありますが、存在しない場合はすべて問題なく、単にnull
?
どうもありがとう。