問題タブ [hilo]
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.
mongodb - DDDとMongoDB:MongoにObjectIDを作成させても大丈夫ですか?
DDD(Blue book、Evans)によると、ファクトリは有効な状態で集約ルートを作成する責任があります。これは、ドメインIDだけでなくテクニカルID(mongoDBの世界ではobjectId)を作成できる必要があることを意味しますか?
一方では、これは技術的な詳細のようであり、MongoにIDの作成を処理させることは問題ないように思われます。
一方、IDによるクエリを有効にすると(getById
DDDリポジトリにあることにより)、テクニカルIDがドメインに公開されます。これにより、ファクトリがIDを作成する必要があります。
テクニカルIDとドメインIDのさまざまなユースケースやオーバーラップなどに頭を悩ませることができないか、熱心に取り組んでいる可能性がありますが、とにかくあなたの意見をいただければ幸いです。
つまり、DDDの場合:ファクトリはドメインIDだけでなくテクニカルIDも作成できる必要がありますか?
可能な実装:Hi / Lo(MongoDB Normでhiloシーケンスの開始値を設定する方法は?)
編集: hi / loの方法では、ファクトリが永続層に公開されますが、これはリポジトリだけが知っておくべきことです。うーん
ありがとう
nhibernate - Identity列ジェネレーターをhiloに変換する:「next_hi」は何に初期化する必要がありますか?
Identityジェネレーターを使用するクラスをhiloを使用するクラスに変換しています。また、エンティティごとに異なる行を持つ単一のテーブルを使用しています。
古いテーブル:
新しいテーブル:
データの整合性を維持するために、既存のPatients.Idを新しいPatientRecord.Idとして使用します。
そして、EntityId
エントリを作成します。
??
次のhi値はどこにありますか。ここではどのような値を使用する必要がありますか?デフォルトでは、列の初期化は1になります。それを使用するだけですか、それとも次のようなものを使用する必要がありますselect MAX(Id) from PatientRecord
か?
java - Hibernate、@SequenceGenerator、allocationSize
使用時の Hibernate のデフォルトの動作は周知のとおりです。@SequenceGenerator
実際のデータベース シーケンスを1増やし、この値を 50 倍して (デフォルトallocationSize
値)、この値をエンティティ ID として使用します。
これは正しくない動作であり、次の仕様と矛盾します。
allocationSize - (オプション) シーケンスからシーケンス番号を割り当てるときに増分する量。
明確にするために: 生成された ID 間のギャップについては気にしません。
基礎となるデータベース シーケンスと一致しないID が気になります。例: 他のアプリケーション (プレーンな JDBC を使用するアプリケーションなど) は、シーケンスから取得した ID の下に新しい行を挿入したい場合がありますが、それらの値はすべて Hibernate によって既に使用されている可能性があります! 狂気。
誰かがこの問題の解決策を知っていますか (設定せずにallocationSize=1
パフォーマンスを低下させません)?
編集:
物事を明確にするために。最後に挿入されたレコードに ID = があった場合1
、HB は51, 52, 53...
新しいエンティティの値を使用しますが、同時に、データベース内のシーケンスの値は に設定され2
ます。他のアプリケーションがそのシーケンスを使用している場合、これは簡単にエラーにつながる可能性があります。
一方:仕様では、(私の理解では)データベースシーケンスをに設定する必要が51
あり、その間、HBは範囲の値を使用する必要 があると述べています2, 3 ... 50
更新:
Steve Ebersole が以下に述べたように: 私が説明した動作 (および多くの人にとって最も直感的な動作) は、設定することで有効にできますhibernate.id.new_generator_mappings=true
。
皆さんに感謝します。
更新 2:
将来の読者のために、以下に実際の例を示します。
persistence.xml
nhibernate - HNibernate HiLo ジェネレーターを使用してプログラムで一意の整数を取得する
外部システムへの注文を識別するために使用する一意の整数を生成する必要があります。アプリケーションで NHibernate HiLo ジェネレーターを使用していますが、プログラムでジェネレーターにアクセスして、一意の整数を返すようにすることはできますか? これをデータベースキーに保存する必要はありません。一意の整数を生成する NH 機能を使用したいだけです。
HiLo テーブルに列を追加します。この列は、この一意の番号シーケンスにのみ使用し、実際のデータベース キーには使用しません。たとえば、列「Foo」を hibernate_unique_key テーブルに追加したとします。
次に、その効果のために何かをすることができますか:
列の名前を渡すだけですか?
hibernate - Hibernate の MultipleHiLoPerTableGenerator でのマルチテナンシーの実装
共有スキーマを使用してマルチテナント アプリケーションを作成しようとしています。顧客のデータベースを除外するのに役立つ識別子フィールドを特定しました。
一部のエンティティの主キーを生成するための TableGenerator 戦略で問題に直面しています。
ロジックに従って、seq_name 用の 2 つの列と、カウントを追跡するための別の列 (seq_count) があります。
しかし、マルチテナント アプリケーションであるため、顧客ごとに分けておく必要があります。したがって、複数の顧客には、それぞれに属する seq_name & seq_count 列があります。
ディスクリミネーター列の属性を使用して、TableGenerator のカスタム ロジックを作成する必要があるかもしれないと考えていましたが、その前に、これを行う他の方法であるアドバイスが必要ですか?
c++ - Visual C 2010 で Hilo サンプル アプリを使用するとエラーが発生する
Visual Studio 2010 Ultimate を使用しています。第 2 章のサンプル プロジェクトをコンパイルすると、次のようになります。
エラーは次のとおりです。「uicc.exe」は、内部コマンドまたは外部コマンド、操作可能なプログラムまたはバッチ ファイルとして認識されません。C:\Program Files\MSBuild\Microsoft.Cpp\v4.0\Microsoft.CppCommon.targets(151,5): エラー MSB6006: "cmd.exe" がコード 9009 で終了しました。3> 3>ビルドに失敗しました。
コンピューターでファイル「uicc.exe」を検索しました。どうやら存在しないようです。SDK のバージョンを確認したところ、v7.0A のようです。
それで... どうすればいいですか?
また...私のアプリケーションがこのファイル「uicc.exe」を必要としていて、私のコンピューターにはそれがない場合...潜在的なターゲットコンピューターにもこのファイルがないということですか?
ユーザーが事前に何かをインストールしなくても、対象の Windows 7 以降のコンピューターでアプリケーションを動作させたいと考えています。
編集:OKAY、別のバージョンの SDK が必要であることがわかりました。
私の新しい質問は次のとおりです。Visual Studio をアンインストールしたり影響を与えたりせずに、所有している Windows 7 SDK をアンインストールするにはどうすればよいですか? プログラムの追加/削除を試みましたが、奇妙なことに SDK for Windows がリストされていません (Silverlight SDK を含むが、Windows SDK を含まない他の多くのもの)。
では、新しいバージョンをインストールできるようにアンインストールするにはどうすればよいですか?
asp.net - NHibernate 多対多は、hilo ジェネレーターを使用して null ID を挿入します
User、Department、UserDepartment の 3 つのテーブルがあります。ユーザーは複数の部門に関連付けることができ、部門は複数のユーザーに関連付けることができます。次のように、両側で多対多の流暢なマッピングを使用します。
部門用
ユーザー向け
すべてのテーブルは、次のように、HiLo Id ジェネレーターとほぼ同様のマッピングを使用します。
一部のユーザーを部門 nhiberante に追加しようとすると、次のエラーで失敗します。
バッチ コマンドを実行できませんでした。[SQL: SQL が利用できません]。内部例外: 値 NULL を列 'Id'、テーブル 'test.dbo.UserDepartment' に挿入できません。列はヌルを許可しません。INSERT が失敗しました。\r\nステートメントは終了しました。
私は同じ HiLo ジェネレーターを他のテーブルで使用しているので、この失敗の原因にはならないと確信しています。
誰かがこの問題に光を当てることができますか? 過去にnull Id挿入に問題があったことを思い出すことができ、コレクションで逆マッピングを使用して解決しましたが、両側で逆マッピングを使用できないため、別の解決策が必要です。
hibernate - Hibernate HiLo アルゴリズムは、クラスター化されたアプリケーションの ID の一意性をどのように保証しますか?
Hibernate HiLo アルゴリズムは、この投稿で非常によく説明されています - Hi/Lo アルゴリズムとは?
しかし、クラスター化されたアプリケーションの ID の一意性をどのように保証するのかは明確ではありません。
たとえば、Hi 番号が 35 で、2 つのクライアントが同時に Hi 番号をインクリメントしようとした場合、各クライアントが取得する Hi 番号は?
java - 休止状態の HiLo シーケンス生成を無効にする
私は Hibernate 4.2.x を使用しており、HiLo シーケンスの生成を無効にしたい - 毎回 DB (oracle) にアクセスします。次の行を persistance.xml に追加しました。
そして、私のエンティティは次のようになります。
何らかの理由で、私はまだ HiLo の動作を取得しています - ID は互いに離れて作成されています。
いくつかの質問 (こことここなど) を調べましたが、役立つものは何も見つかりませんでした。さらに、どのオプティマイザーを使用するかを設定する場所が見つかりませんでした。