問題タブ [nhibernate]
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.
c# - NHibernate: save() およびカスケードに渡される初期化されていないプロキシ
session.Save() を呼び出すと、save() に渡された初期化されていないプロキシが原因で、NHibernate.PersistentObjectException が発生し続けます。カスケード設定をいじると、それを消すことができますが、子オブジェクトが保存されません。
私が見つけた他の唯一の修正は、DefaultSaveEventListener に以下を追加することです。
これは明らかに理想的なソリューションではありません。
何か案は?
vb.net - VB.NET のジェネリック関数
私は一般的にジェネリック (概念または構文) にあまり精通していません (コレクションでそれらを使用することを除く) が、次の方法が私が望むものを達成するための最良の方法であるかどうか疑問に思っていました. 実際、私はこの場合、ジェネリックが私の問題を解決してくれると完全に確信しているわけではありません。
私は NHibernate で数十個のオブジェクトをモデル化してマッピングしましたが、タイプごとに個別の永続化クラスを作成するのではなく、CRUD 操作用にある種のユニバーサル クラスが必要です。
someObject は異なる型にすることができます。これが最善の方法ではないことはわかっていますが(またはうまくいく場合でも)、誰かが私を正しい方向に導いてくれることを願っています。
.net - nHibernate、オブジェクトごとの行マッピングを持たないテーブルにマップできますか?
次のようなテーブルを含むデータベースがあります。
プロパティ ID、エンティティ ID、値
PropertyId と EntityId は結合された主キーです。すべてのエンティティは、すべての行にエンティティの単一のプロパティが含まれるいくつかの行にまたがっています。私はこのデータベースを制御できないので、それを操作する必要があります。
NHibernate を使用して、エンティティをこのテーブルから単一のオブジェクトにマップすることは可能ですか? このテーブルから読み取るだけで済みます。これにより、作業が少し簡単になる可能性があります。それとも、DataReaders を使用して自分でマッピングを行うほうがよいでしょうか?
c# - NHibernate での多対多の削除カスケード
できる限り単純化しようとしたシステムのシナリオがあります。アーティファクト (と呼びましょう) のテーブルがあり、アーティファクトには任意の数のセキュリティ ロールがアクセスでき、セキュリティ ロールは任意の数のアーティファクトにアクセスできます。そのため、データベースには 3 つのテーブルがあります。1 つはアーティファクトを記述し、もう 1 つはロールを記述し、アーティファクト ID をロール ID にリンクする多対多の関連付けテーブルです。
ドメインに関しては、ロール用とアーティファクト用の 2 つのクラスがあります。アーティファクト クラスには、それにアクセスできるロールのリストを返す IList プロパティがあります。(ただし、ロールは、アクセス可能なアーティファクトを取得するためのプロパティを提供しません)。
そのため、artefact の nhibernate マッピングには以下が含まれます。
これはすべて正常に機能し、アーティファクトを削除すると、関連付けテーブルが適切にクリーンアップされ、削除されたアーティファクトとロールの間のすべての参照が削除されます (ロールは正しく削除されませんが、孤児を削除したくないため)。
問題は、ロールを削除して関連付けテーブルを自動的にクリアする方法です。現在ロールを削除しようとすると、ロールの関連付けテーブルにまだエントリがあるため、参照制約が発生します。ロールを正常に削除する唯一の方法は、そのロールにリンクしているすべてのアーティファクトを照会し、アーティファクトのロール コレクションからロールを削除し、アーティファクトを更新してからロールを削除することです。簡素化されたシステムで、ロールは他のテーブル/オブジェクトにいくつでも関連付けることができます。
ロールを削除するたびに、この関連付けテーブルをクリアしたいことを NHibernate に示唆できるようにする必要があります。これは可能ですか。
助けてくれてありがとう。
.net - Hibernate カスタム SQL オブジェクトの作成
やや単純化された状況例: 信じられないほど「重い」ドメイン オブジェクトであるエンティティ A と B があります。データベースから 1 つをロードするのはかなり大変なことです。次に、エンティティ C があります。これは、ラベル文字列 A と B を持つ非常に単純なオブジェクトで、どちらもレイジーです。
C の巨大なリストを作成するために低レベルのクエリを実行しているので、CA と CB 用に保存する必要がある ID は正確にわかっていますが、オブジェクト全体を読み込んでプロパティに設定したくありません。オーバーヘッドは非常識です。
代わりに、ID を C エンティティに直接挿入し、後で必要な場合にのみ A および B プロパティを完全にロードできるようにしたいと考えています。
<sql-insert/>
ドキュメントにタグが表示されていますが、そのセクションは本当にまばらです。
NHibernate フレームワーク内でやりたいことを実行する方法はありますか、それとも生の SQL を実行する必要がありますか? 可能であればデータベースの移植性を維持しようとしているため、生のオプションには敬遠されています。私が見逃しているより良い方法があるはずです。
nhibernate - nhibernate - 1 対多のリレーションシップの子レコードの自動\遅延読み込みを無効にする
nHibernate での子レコードの自動読み込みを無効にする方法があるかどうかを知りたい (1:多関係の場合)。
プロパティの遅延読み込みを簡単にオフにすることができますが、私が望むのは、あらゆる種類の自動読み込み (遅延と非遅延の両方) を無効にすることです。クエリを介してのみデータをロードしたい (すなわち HQL または Criteria )
マッピング ファイルで親子レコード間の関係を定義して、HQL を容易にし、親子エンティティを結合できるようにしたいのですが、親レコードはそれを明示的に述べています(熱心なフェッチなどを介して)。
例: データベースからの部門レコードのフェッチでは、データベースからすべての従業員レコードをフェッチする必要はありません。
ここでのオプションの 1 つは、Department の Employees コレクションを遅延ロードとして設定することです。このアプローチの問題点は、オブジェクトが呼び出し元の API に渡されると、遅延読み込みプロパティに「触れる」ことができ、データベースからリスト全体をフェッチすることです。
「エビクト」を使用してオブジェクトを切断しようとしましたが、常に機能しているようには見えず、オブジェクトに対して深いエビクトを実行しません。さらに、リフレクションを介してオブジェクトを操作しようとしているコードで後で大混乱を引き起こすプロキシ クラスを使用して、遅延ロードされたプロパティ タイプを抽象化し、オブジェクトで未使用のタイプに遭遇します。
私は nHibernate の初心者です。ポインタやヘルプは非常に役立ちます。
c# - 文字列セットをプレゼンテーション層に取り込む
私たちは、C#で記述され、NHibernateを使用してオブジェクトをデータベースにマッピングしている病院情報システムに取り組んでいます。MVCパターンは、ビジネスロジックをUIから分離するために使用されています。ここに問題があります、
可変サイズの異なる文字列のセットをUIにどのように取得しますか?
たとえば、Contact
オブジェクトには、City
どの都市の連絡先が存在するかを保持するという名前のプロパティがあります。アプリが作成されている国には、80を超える都市があります。これらの都市をコンボボックスにどのように書き込むことができますか?(またはデータグリッド、テーブルなど)この例では、都市番号は固定されています。長い間、別の都市を追加する必要はありません。(都市リストが変更された場合、再コンパイルは問題になりません)
たとえば、Contact
オブジェクトにはFooBar
1000の異なる文字列値を保持するという名前の別のプロパティがあり、これらの値はそのプロパティのコンボボックスから選択されます。また、このセットは、ユーザーが必要に応じて拡張できます。これらの値をコンボボックスにどのようにロードしますか?(文字列リストがコンボボックスオブジェクトに静的に書き込まれる場合、再コンパイルは問題になります)
私は以下のようにさまざまな解決策を持っています
- コードまたはデザイナーのコンボボックスに静的に書き込まれるすべての文字列値
- リソースファイルから値を取得します
- これらの値をXMLファイルに書き込みます(実際には上記と同じですが、再コンパイルする必要はありません)
City
オブジェクトを作成し、NHibernateを使用してテーブルからリストに値を取得しCITY
ます- andプロパティ
StringHolder
を持つという名前のクラスを作成します。すべての文字列値(およびを含む)は、。という名前の1つのテーブルにのみ書き込まれます。そして、NHibernateで「CITY」や「FOOBAR」などのキーを使用してこれらの値を取得します。Type
Value
City
FooBar
STRINGHOLDER
どちらを選びますか?それとも私に別のものを提案してもらえますか?
皆さんありがとう
nhibernate - NHibernateの値オブジェクトへの複数の値のマッピング
私はNHibernateにかなり慣れていません。ウェブ上で、NHibernateマッピングに関する情報をたくさん見つけていますが、この情報を見つけるにはあまりにも愚かです。
だから問題は、私は次のモデルを持っているということです:
これが私が見たいものです。2つのアドレスプロパティを持つ1人のきれいな人。
データベースでは、これを1つのテーブルに保持したいと思います。したがって、Person行にはShippingStreetname列とStreetname列があり、一方はShippingAddress.Streetnameにマップされ、もう一方はAddress.StreetNameにマップされます。
流暢なインターフェースに関する記事を見つけましたが、XML構成を介してこれを行う方法をまだ理解していません。
前もって感謝します!
更新:私はこれに対する解決策を自分で見つけました。これはノードを介して実行でき、かなり簡単に機能します。
AddressとShippingAddressのマッピングを実現するには、以下を追加する必要があります。
c# - ロールまたはコンポジションを使用して NHibernate でクラスをマップする方法
これはよくある質問/問題だと思いますが、適切で簡潔な回答を見つけることができませんでした。
問題
継承関係があるように見えるエンティティをマップする方法:
ただし、サプライヤーはメーカーになることができます。
また
患者が医師になることも、従業員になることもできます。
提案: ロールを使用する
NHibernate フォーラムでの議論では、これは多重継承であるという反応がよくあります。
http://forum.hibernate.org/viewtopic.php?t=959076
彼らが提案する解決策は、コンポジションを使用するか、「ロール」を使用することです。ただし、それを正確に行う方法についての例や説明は見つかりません。
「継承よりも構成を優先します。」クラスでのちょっとしたお菓子を覚えていますか? この例では、多重継承を試みていることに同意する必要があります。C# や Java では (まだ) 不可能です。個人的には、リモデリングを検討して、Person オブジェクトを持ち、Person が Role の 1 対多のコレクションを持つようにすることをお勧めします。
c# - NHibernate は C# で列名を自動的に変更します
NHibernate がこれを行っている理由がわかりませんでした。
これがMS SQLの私のテーブルの一部です
ここに Person.hbm.xml があります
そして、私の Person.cs で、次のようにプロパティに名前を付けます
次に、次のコードを使用してレコードを作成しようとします
そして奇妙なのは、実行しようとすると、NHibernate が実際に次のようにして列名を変更することです。
したがって、ここで NHibernate は列名を NameFamily から name_family に変更しますが、列名を指定しました。
これは Hibernate のバグですか? または、私が行う必要がある構成はありますか?
そして、これが私の休止状態の設定ファイルです
そして、これがsessionFactoryを作成する方法です