問題タブ [sequence-generators]
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 @SequenceGenerator アノテーションはどのように機能しますか
私はJPAを学んでいて、@SequenceGenerator
注釈に混乱があります。
私の理解では、エンティティの数値 ID フィールド/プロパティに値が自動的に割り当てられます。
Q1. このシーケンス ジェネレーターは、データベースの増加する数値生成機能を利用しますか、それとも独自に数値を生成しますか?
Q2. JPA がデータベースの自動インクリメント機能を使用している場合、自動インクリメント機能を持たないデータストアでも動作しますか?
Q3. JPA が独自に数値を生成する場合、JPA 実装は次に生成する値をどのように知るのでしょうか? 値 (最後 + 1) を生成するために、最後に保存された値を確認するために、最初にデータベースに問い合わせますか?
Q4. また、注釈のいくつかの光sequenceName
とallocationSize
プロパティを当ててください。@SequenceGenerator
java - HSQLDB と SequenceGenerator の問題
ID フィールドを持つエンティティがあります。
このクラスには、シーケンス ジェネレーターも定義されています。
また、Oracle スキーマには必要なシーケンスが存在します。すべて正常に動作します。
インメモリ HSQLDB を使用するテストもあります。テストを実行する前に、Hibernate エンティティ クラスに基づいてすべてのテーブルが作成されます。
ただし、この特定のクラスのテーブルは作成されていません。ID は文字列であり、HSQLDB の SequenceGenerator は INT / LONG / Numeric 値を返すため、エラーがポップアップします。
アプリケーションは従来の Oracle データベースを使用しており、ID_VOIE 列は String / Varchar のままにする必要があります。
解決策はありますか?
java - @MappedSuperclass でアノテーションが付けられたクラスの @SequenceGenerator
私のエンティティの構造は次のとおりです。
そして、私は次の例外を得ました:
Intermed クラスで @MappedSuperclass を @Entity に変更すると、すべて正常に動作します。@MappedSuperclass と @SequenceGenerator の使用に問題はありますか? それとも私は何かを逃したのですか?
oracle - oracleストアドプロシージャは、単独で生成するよりも休止状態を介してより多くの数を生成します
エントリID()の番号を生成するストアドプロシージャがありますentry_id_seq
。次の設定では、コードはSQLで直接呼び出されるよりも比較的大きな数を生成します。
たとえば、次のコードはidの番号「11195215652」を生成します。しかし、実行するselect entry_id_seq.NEXTVAL nv from dual
と、はるかに小さい「32350910」が返されます。
私は以下の提案を試しました
しかし、それは私に次のエラーを与えます:
hibernate - @SequenceGeneratorを使用してシーケンスを作成する
シーケンスジェネレータのJava側を定義する方法があるかどうか知りたいのですが。通常、データベースにはシーケンスジェネレータが定義されており、を使用してそれらをエンティティにマッピングします。
@SequenceGenerator(name = "generator"、sequenceName = "SEQ_FOO_ID")。しかし、データベースからシーケンスジェネレーターを使用する代わりに、休止状態自体が値を生成する方法はありますか?
ありがとう!
oracle - Hibernate SequenceGenerator が正しくない nextval を返す
これは、休止状態に関する 2 回目の投稿です。休止状態を使い始めてから、解決した問題よりも多くの問題が発生しました。普通の古い JDBC にこだわるべきだったような気がします。ともかく、
これが私が戦おうとしている問題の1つです。
.hbm ファイルのシーケンス ジェネレーターは次のようになります。
注: 初期値は 17599 です。これは、Oracle シーケンスの LAST_NUMBER が 17599 であるためです。
コードを実行すると、次のシーケンスが Hibernate Debug ステートメントで 200、201 として生成されていることがわかります。
nextval は 17600 であると予想していました。オラクル シーケンスがまったく使用されていないようです。
構成のどこが間違っているのか、それを修正する方法を教えてください。どんな助けでも大歓迎です。
ありがとう
jpa - SequenceGenerator から次の値を取得する
SequenceGenerator を利用して、シーケンス ジェネレーターから次の値を取得したいと思います。DB へのアクセスを避け、sequencegenerator に依存して一意の値を取得したいと考えています。また、オブジェクトを永続化せずに、値を使用して表示フィールドに一意の ID を表示しています。
java - 効率的なスケーラブルなシーケンスジェネレータの実装
問題:
50〜100台のTomcatサーバーで使用される複数の共有シーケンスジェネレーターを実装する必要があります。各シーケンスジェネレーターは1から始まり、要求ごとに1ずつ増加する必要があります。シーケンスジェネレータの実装には、アトミックインクリメントコマンドが必要です。Javaクライアントが利用可能である必要があります。
スケール:
最大50000のシーケンスジェネレーターがアクティブに使用されます。それぞれについて、5〜10秒で1つの増分リクエストが必要です。1秒あたり最大20000リクエスト
50-100Javaクライアント(Tomcatサーバー)。シーケンスジェネレーターへのアクセスは、これらのサーバー間で共有されます。重要:2つのクライアントのみが同じシーケンスジェネレーターを使用します。
50〜100回-各シーケンスジェネレーターが使用される平均回数。
24時間TTL-ジェネレーターは作成後24時間以内にクリーニングする必要があります-したがって、実際には50000を超えるシーケンスジェネレーターが存在する可能性がありますが、同時にアクティブにリクエストを受信するのは最大50000までと予想されます。
パフォーマンス:
1ms未満の望ましい平均応答時間。2ms以上の平均は間違いなく十分ではありません。
OracleのSequenceオブジェクトを除外しました。
現在、RedisとMemcachedを検討しています。
どちらも高速です。
どのような実装が推奨/十分に良いですか?
この目的のために他にもっと良い技術はありますか?
もう1つの重要な質問:
incr、Redis、Memcachedのどちらのパフォーマンスが優れていますか?
ありがとう
hibernate - @SequenceGenerator と allocationSize 強制リセット
@SequenceGenerator を使用してエンティティをマッピングし、allocationSize を 100 に設定しました。Hibernate は主キーを適切に生成します。
これでバックグラウンド ジョブが発生し、一連の新しいレコードをテーブルに挿入する必要があります。このプロセスが完了したら、Hibernate に強制的に割り当てブロックをリセットさせ、シーケンスから次の ID セットを再度読み取ります。
そうしないと、hibernate は、プロセスによって入力された新しいレコードと重複する可能性のある次の ID セットを (割り当てプールに残っている ID に基づいて) 生成します。
割り当てプールをクリアし、休止状態にシーケンス nextval を強制的にリロードする方法はありますか? システム全体の設定も行います (つまり、すべてのシーケンスの再読み込みを強制します)。