問題タブ [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.
java - @Id なしの休止/永続化
真の主キーを持たない結果セットを生成するデータベース ビューがあります。Hibernate/Persistence を使用して、この結果セットを Java オブジェクトにマップしたいと考えています。もちろん、PKがないので、どのフィールドも で飾ることはできません@Id
。
デプロイするとき、Hibernate は欠落について不平を言い@Id
ます。どうすればこれを回避できますか?
java - Hibernate マッピング パッケージ
私は休止状態の注釈を使用しています。
すべてのモデル クラスで、次のように注釈を付けます。
私のhibernate.cfg.xmlは
com.fooPackage に追加するクラスごとに、次のように hibernate.cfg.xml に行を追加する必要があります。
新しいモデル クラスを追加する方法はありますが、この行を hibernate.cfg.xml に追加する必要はありませんか?
java - Hibernateアノテーションを使用したビューオブジェクトのSQLが間違っています
データベースビューのHibernateエンティティマッピングに取り組んでいます。それに対して基準クエリを実行すると、hibernateは不正なSQLを生成しています。私のマッピングの問題が何であるかを理解する助けがあれば大歓迎です!
データベースビューから取得しようとしている2つのマップされたエンティティがあります。ビューには他の列はなく、各エンティティのFKのみがあります。ビューには各プライマリエンティティの行があるため、これらのFKの1つをプライマリキーとして扱うことができます。したがって、ビューのDBスキーマは次のようになります。
マップされたすべての履歴レコードではなく、各プライマリの最新の履歴のみを取得するため、ビューが使用されていることに注意してください。ビューに使用しているオブジェクトとエンティティの注釈は次のとおりです。
PrimaryオブジェクトとHistoryオブジェクトの両方に、完全な作業エンティティの注釈があります。
私の基準設定:
そして(間違った)生成されたSQL:
プロジェクトのDBスキーマの詳細を編集するときに、いくつかのことをいじくりまわしたかもしれませんが、要点は、「select」句の最初のフィールドが間違っていることです。
this_.primary(view_latest_status_history.primary)はフィールドではありません。フィールドはprimary_idと呼ばれる必要があります。これは、プライマリフィールドの@Idアノテーションと関係があると思いますか?これを修正する方法はありますか?@Idを削除すると、エンティティに主キーがないというエラーが表示されます。
アップデート:
(以下に示すように)結合テーブル表記を使用してビューをフィールドとしてマップしなくなりました。アノテーションを以下のように改訂しました。このソリューションはHQLで正しく機能し、hbm2ddlが有効になっている場合に期待されるスキーマを生成しますが、基準クエリを使用して再テストしていません。
java - 同じエンティティとのHibernateの再帰的な多対多の関連付け
別のHibernateの質問...:P
HibernateのAnnotationsフレームワークを使用して、User
エンティティがあります。それぞれUser
が友達のコレクションを持つことができます:他User
のコレクション。User
ただし、sのリストで構成されるクラス内に多対多の関連付けを作成する方法を理解できませんでしたUser
(ユーザーフレンドの中間テーブルを使用)。
Userクラスとそのアノテーションは次のとおりです。
ユーザーフレンドマッピングテーブルには2つの列しかなく、どちらもテーブルのuid
列への外部キーtbl_users
です。2つの列はpersonId
(現在のユーザーにマップする必要があります)、およびfriendId
(現在のユーザーの友達のIDを指定します)です。
問題は、システム内のすべてのユーザーが他のすべてのユーザーと友達になるように友達テーブルを事前入力したにもかかわらず、「友達」フィールドがnullのままになることです。関係をに切り替えようとしましたが@OneToMany
、それでもnullになります(Hibernateのデバッグ出力にはSELECT * FROM tbl_friends WHERE personId = ? AND friendId = ?
クエリが表示されますが、それ以外は表示されません)。
このリストにデータを入力する方法について何かアイデアはありますか?ありがとうございました!
hibernate - hibernate @DiscriminatorValue は関連付けには適用されません
次の継承階層があります。
を実行すると、選択クエリsession.load(Apple.class,...)
に追加されます。FRUIT_TYPE = 'APPLE'
しかし、(Apple と 1:m の関係にある) FruitBowl で select を実行すると、Apple の select クエリには が含まれませんFRUIT_TYPE = 'APPLE'
。なぜこれが起こるのですか?問題を修正するにはどうすればよいですか?
クエリ -- FruitBowl のクエリ
-- リンゴを取得するための Fruit のクエリ (fruit_type ='A' のレコード) -- ただし、その条件は含まれていません
reverse-engineering - Hibernate-アノテーションをプロパティ(メソッド)レベルからフィールドレベルに移動します
フィールドレベルでアノテーションを付けたテーブルからHibernateドメインクラスを生成するにはどうすればよいですか?Hibernate Toolsプロジェクトを使用し、データベースのテーブルからドメインクラスを生成しました。生成されたクラスには、フィールドレベルではなく、getterメソッドにアノテーションが付けられています。フィールドに注釈が付けられたドメインクラスを生成する方法を教えてください。アノテーションをメソッドレベルからフィールドレベルに移動するために、Eclipse / IDEAなどで利用できるリファクタリング機能はありますか?
あなたの助けと時間を感謝します。
java - 再作成された Bean の要素を削除するときに Hibernate cascade delete が機能しない
これらが私の親と私の子オブジェクトであると仮定します:
親:
子:
次の疑似コードが機能します
- ImportTable のインスタンスを作成し、2 つの列を追加し、セッションを作成して保存し、セッションを閉じます。
- 保存されたインスタンスを別のセッションで読み取り、1 つの列を削除します。
- 別のセッションに保存します。
- 列数を確認し、1 に等しい。
ただし、次の場合は機能しません。
- ImportTable のインスタンスを作成し、2 つの列を追加し、セッションを作成して保存し、セッションを閉じます。
- 保存されたインスタンスを別のセッションで読み取ります。
- 保存されたオブジェクトを手動で再作成します。
- 列を削除します。
- 別のセッションに保存します。
- 列数を確認し、1 に等しい。
この理由は、Java サーバー/Flex クライアント アプリケーションがあり、オブジェクトをロードしてクライアントに送信し、クライアントに必要なことをすべて実行させ、オブジェクトをサーバーに送り返す必要があるためです。それを保存。
オブジェクトを再作成すると、Hibernate が失われていると思います。私の知る限り、Hibernate はオブジェクトがデータベースから取得されるときにオブジェクトに何かを挿入します。オブジェクトを再作成するとき、オブジェクト クラスで宣言されたフィールド以外はコピーしません。これは、オブジェクトを再作成するコードです (私の単体テスト用):
オブジェクトを再作成すると、休止状態が失われると思います。私が休止状態にしたいのは、データベースにあるものとオブジェクトにあるものを比較し、違いだけを保存することです。それを行う方法はありますか?
hibernate - Hibernate Annotations を使用した大きなファイルの永続化
Web アプリケーションで初めて Hibernate Annotations を使用しています。私の Bean では、ユーザーがアップロードしたファイルを永続化するためにどのタイプの注釈を使用すればよいですか?
hibernate - Hibernate での長い文字列の永続化に関する問題
私の Web アプリケーションには、ユーザーが入力したコンテンツが最終的に Hibernate でデータベースに永続化されるテキスト領域があります。ユーザー入力が特定の長さを超えると、永続化が失敗するという問題が発生しています。この特定のフィールドがより長い文字列をサポートする必要があり、データベースの列の種類がこれを反映する必要があることを Hibernate Annotations または構成で示す方法はありますか?
これが私が得ている例外です:
hibernate - @OneToOne 関係に @ForiegnKey アノテーションを含めることはできますか
@OneToOne メンバーに @ForiegnKey アノテーションを含めることは理にかなっていますか。