6

Hibernate によって作成されたデータベース シーケンスに関して、助けを求めたいと思います。

パートナー テーブルの個々のシーケンスを作成するために、エンティティ クラスにこの注釈 (以下のコード) があります。デプロイ中に import.sql を使用してデータベースにテスト データを挿入し、制約違反を回避したいので、シーケンスは 1000 から始まると予想しています。しかし、データを保持したい場合、制約違反の例外が発生し、partner_id = 2 が既に存在するという事実が通知されます。何かを見逃したようです。

    @Id
    @Column(name = "partner_id")
    @SequenceGenerator(initialValue=1000, 
                        allocationSize=1,
                        name = "partner_sequence", 
                        sequenceName="partner_sequence")
    @GeneratedValue(generator="partner_sequence")
    private Long partnerId;

生成されたシーケンスは次のようになります。

CREATE SEQUENCE partner_sequence
  INCREMENT 1
  MINVALUE 1
  MAXVALUE 9223372036854775807
  START 1
  CACHE 1;
ALTER TABLE partner_sequence
  OWNER TO postgres;

私はpostgres 9.1を使用しています。

私は何か見落としてますか?これが、私が望むものにどのようにアプローチできるかです。

事前に助けてくれてありがとう!

4

2 に答える 2

5

initialValueがこの記事hibernate.id.new_generator_mappings=trueに従って指定されている場合にサポートされます。この投稿に記載されているのと同じ問題があり、このレシピに従って解決しました。シーケンスが正しく生成されるようになりました。

于 2014-02-22T02:05:23.090 に答える
3

initialValueシーケンスを使用するアルゴリズムalocattionSizeに固有です。これhiloによると、サポートされていません。シーケンス値はデータベースで生成されるため、Javaレイヤーからどのようにサポートできるかさえわかりません。 initialValue

休止状態のオラクルシーケンスが大きなギャップを生成することも参照してください

于 2013-01-04T07:06:54.953 に答える