0

エントリID()の番号を生成するストアドプロシージャがありますentry_id_seq。次の設定では、コードはSQLで直接呼び出されるよりも比較的大きな数を生成します。

たとえば、次のコードはidの番号「11195215652」を生成します。しかし、実行するselect entry_id_seq.NEXTVAL nv from dualと、はるかに小さい「32350910」が返されます。

@javax.persistence.SequenceGenerator(name = "seq",
sequenceName = "entry_id_seq")
public class SomeClassimplements Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "seq")
    @Column(name = "ID")
    private Long id;

私は以下の提案を試しました

@javax.persistence.SequenceGenerator(name = "seq",
sequenceName = "entry_id_seq", allocationSize = 1, initialValue= 1)

しかし、それは私に次のエラーを与えます:

Caused by: org.hibernate.HibernateException: increment size cannot be less than 1
    at org.hibernate.id.enhanced.OptimizerFactory$LegacyHiLoAlgorithmOptimizer.<init>(OptimizerFactory.java:336)
    at org.hibernate.id.SequenceHiLoGenerator.configure(SequenceHiLoGenerator.java:64)
    at org.hibernate.id.factory.DefaultIdentifierGeneratorFactory.createIdentifierGenerator(DefaultIdentifierGeneratorFactory.java:110)
4

2 に答える 2

2

どのバージョンの休止状態を使用していますか? < 3.5.3 の場合は、これを確認してください https://hibernate.onjira.com/browse/HHH-5230

アノテーションで設定されたallocationSize = 1のレガシージェネレーターに影響を与えるようです。

解決策: 1. 新しいジェネレーターを使用するように構成し、2. アップグレードし、3. バージョンに手動でパッチを適用します。

于 2011-07-20T20:35:40.040 に答える