1

DBに負のシーケンス(-1、-2、-3など)があり、エンティティのIDを生成するためにそれを使用したいと思います。

@Entity
@Table(name="FOO")
@SequenceGenerator(name="foo_seq", sequenceName="negative_seq", allocationSize=1)
public class Foo {
    @Id
    @Column(name="id")
    @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="foo_seq")
    private Long id;
}

問題は、それが使用され、次のコードSequenceHiLoGeneratorのメソッドの無限ループに入るということです。generate

while ( value == null || value.lt( 0 ) ) {
    value = super.generateHolder( session );
}

ネガティブシーケンスがHibernateでサポートされていないということですか?それとも私は何か間違ったことをしていますか?ネガティブシーケンスの使用に関するHibernateのドキュメントには何の言及も見つかりませんでした。

4

1 に答える 1

1

シーケンスジェネレーターの減少はサポートされていません。org.hibernate.id.IdentifierGeneratorしかし、それを行うために独自の実装を追加するのは簡単です。それを呼びましょうorg.my.DecreasingSequenceGenerator

@Entity
@Table(name="FOO")
@GenericGenerator(
    name="my_seq",
    strategy="org.my.DecreasingSequenceGenerator",
    parameters = {
        @Parameter( name="sequence", value="negative_seq" ),
        ...
    }
)
public class Foo {
    @Id
    @Column(name="id")
    @GeneratedValue(generator="my_seq")
    private Long id;
}

DecreasingSequenceGenerator実装に持たせたいパラメータ化を渡します。

于 2012-08-27T13:22:02.087 に答える