問題タブ [composite-id]
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 - JPA 複合キーの null 許容列
Hibernate の JPA impl を使用していくつかのテーブルをモデル化しています。次のようなテーブルのマッピングに問題があります。
- 主キーがない
- 4 つの列に一意のインデックスがあり、そのうち 3 つを null 許容にすることができます
私はそれをハックしてインデックスを複合IDとして定義しようとしましたが、一部の列はnull可能であるため、これは正しく機能していません. これは JPA/Hibernate で可能ですか?
ありがとう
c# - NHibernate を使用して複合キーを持つレコードを挿入する
複合キーを使用するレガシー データベースを使用しています。そして、NHibernate を使用して新しいレコードをデータベースに挿入しようとしています。NHibernate では、ID を手動で作成する必要があると指定されていますが、この ID で挿入しようとすると、次のメッセージが表示されます。
米国の本社が管理しているため、データベースの設定に触れることはできません。
次の方法でdb挿入を実行できることがわかりました。
tablename_id
列は自動的にインクリメントされます。
ID
セットを使用してオブジェクトを作成し、プロパティCountryId
を自動インクリメントできるようにするある種のハンドラーを作成することは可能ですか。Id
乾杯。
コード例:
テーブル定義:
クラスファイル:
マッピング ファイル:
c# - 複合 ID のキー多対 1 によるナビゲーションは可能ですか?
Nhibernate で複合 ID のキーと多対 1 の関連付けをナビゲートすることは可能ですか?
次の設定でマップした (レガシー) テーブルがいくつかあります。
クエリで StructureUser クラスを介して Structure の "Low" プロパティにアクセスしたいと考えています。考えられる Criteria API のすべての使用法を試しましたが、常にエラーが発生しました。私が試した2つのクエリは次のとおりです。
crit1 のエラーはデータベースから発生し、"struc_1.Low はこのコンテキストでは有効ではありません" と表示されます。これは、NHibernate が sql コマンドの制限に必要な結合を生成しないためです。crit2 のエラーは NHibernate に由来し、StructureUser の「Structure.Low」プロパティにアクセスできないことを示しています。
この問題は、複合 ID を key-property 要素で宣言し、通常の多対 1 要素との関係を宣言することで回避しました。
この問題の別の解決策はありますか?
nhibernate - key-many-to-oneおよびkey-propertyの関連付け:nhibernateはセットからアイテムを削除しません
私はこれを簡潔に保つように努めますが、うまくいけば、私のトラブルで重要な情報を見逃すことはありません。私が信じるコードはすべての詳細を提供しますが、私はノイズを省略しました(VBなので、ノイズがたくさんあります:))。
「Case」オブジェクトには多くの「Assignments」があります。
私が渡したデータモデルは、CaseAssignmentが複合キーであることを除けば、期待どおりのように見えます。
最後に、流暢なNHibernateマッピング:
KeyReferenceは、XMLマッピング用語の「key-many-to-one」と相関関係があります。
ケースに割り当てを追加するとすべて問題ありませんが、参照を削除すると2つの問題のいずれかが発生します。このコードで:
返されるエラーは、「コレクション行を削除できませんでした。..値NULLを列'CaseId'、テーブル'CaseAssignments'に挿入できません。列はnullを許可しません。UPDATEは失敗します。ステートメントは終了しました。」これは、次のSQLを発行しようとしたことによるものです。
少しめちゃくちゃです。だから私はこのコードを試してみます:
NHibernateが次のことを試みたため、エラーは「予期しない行数:0;期待される:1」です。DELETEFROM CaseAssignments WHERE RoleId = [valid guid] AND CaseId = NULL
私はスレッドとフォーラム、およびNHibernateとHibernateのドキュメントを精査してきましたが、実際にはまだ似たようなものに出くわしていません。うまくいけば、それは単純なものです。これを撮ってくれた人に感謝します!
inheritance - 継承された複合IDから複合IDをマッピングするFluentNHibernate
次の3つのテーブルを持つ既存のデータベースがあるとします。
表1:
(PK)T1ID1
(PK)T1ID2
表2 :
(PK)T2ID1
表3:
(FK)T1ID1
(FK)T1ID2
(FK)T2ID1(3つのキーは上の表からのものです)
私の質問は、Table3をFluent NHibernateでマッピングするにはどうすればよいですか?
私が混乱しているのは、その複合キーが2つの異なるテーブルからのものであるという事実をどうするかです。
表1と表2のマッピングには次のものがあります。
nhibernate - Hibernate のサブクラスと複合キー
複合キーを持ち、完全に機能しているクラス StoreHours があります。別のタイプの時間を返してほしいという新たな要求が出てきました。私は「単純です。基本クラスを抽象化し、2 つの具体的な実装を用意して、アプリ内の参照を新しいクラスの 1 つに変更します」と考えました。ただし、それを行うと、単体テストは失敗しました
X.Test.StoreTest.HoursTest: NHibernate.InstantiationException: 抽象クラスまたはインターフェースをインスタンス化できません: X.Model.StoreHours
私のマッピングファイルは次のようになります
ここで同様の問題を抱えている人を見つけて、彼らの解決策をたどり始めましたが、実際には、最初よりもさらに多くの問題が発生しました。
レコードをデータベースに完全に永続化できますが、オンロードすると、「OfficeHours」から強力な型セットしか取得していないにもかかわらず、NHibernate は抽象的な「StoreHours」をインスタンス化しようとしています。
これは本当に些細な要件のように思えるので、何か単純な間違いをしているに違いないと思います。すべてのヒントに感謝します。
mysql - (Fluent) NHibernate 複合 ID の問題: MySQL は、パラメータ インデックスが範囲外であると不平を言います
Fluent NHibernate を使用して ASP.NET MVC プロジェクトを作成し、ユーザーによる提出と投票 (上/下) を行います。
もちろん、ユーザーは提出物に賛成票または反対票を投じることができます。これを記録するために、次のフィールドを含む中間テーブル SubmissionVote を作成しました。
ここに私のマッピングがあります:
提出
ユーザー
投稿投票
DB の中央のテーブルにはスコア フィールドがあるため、それを表す SubmissionVote クラスを作成しました。そのクラスのユーザー フィールドと送信フィールドは、それぞれのクラスとの多対 1 の関係です。
問題はこれです: SubmissionVote クラスには ID プロパティが必要です。そうしないと、NHibernate がエラーを生成します。マッピングで表されるように、SubmissionVote の ID は複合 ID であるため、そうではありません。
私は一緒に暮らすことができますが、それは別の問題を引き起こします. session.SaveOrUpdate(submission) を使用して、いくつかの SubmissionVotes を含む送信を保存しようとすると、次の質問のように、MySQL によってスローされた ArrayOutOfBounds 例外というエラーが発生します。流暢なnhibernateのidフィールド? .
NHibernate のログを見ると、MySQL に送信されたクエリを確認できます。
どうやら、NHibernate はデフォルトの「ID」値 ('0') をクエリに含めようとします (おそらく、私が SubmissionVote に追加した ID プロパティ)。
2つの問題は関連していますか?どうすればこの問題を解決できますか?
どうもありがとうございました!
編集
これは、NHibernate によって作成された私の (部分的ではあるが関連する) スキーマです。
nhibernate - NHibernate - 複合 ID - 3
Nhibernate hbm ファイルにクラスがあり、このために次のように複合 ID フィールドを使用しています。
ここで、DContent と Structure はクラスであり、Language は int です。
Equals と GetHashCode メソッドを上書きして、複合キーの 3 つのオブジェクトを追跡しましたが、データベースにテーブルを作成するときに、2 つの DId と RId のみが主キーの一部であることがわかりました。 、言語ではありません。
私の質問は:言語が主キーの一部であることをNHibernateが認識しないのはなぜですか??
ありがとう、カタリン
c# - 親エンティティ複合キーの一部で子エンティティを参照できないのはなぜですか
一部の子エンティティを、親複合キーのすべてではなく一部で参照しようとしていますが、なぜできませんか? これは、コメントされているものの代わりに次のマッピングを使用すると発生します。
次のエラーが表示されます
テーブル VolatileEventContent の外部キーには、テーブル LocationSearchView で参照される主キーと同じ数の列が必要です
および VolatileEventContent マッピング ファイル