我希望在Hibernate 5中创建一个自定义的序列生成器,以在Postgresql中为每个表创建一个序列。 在Hibernate 4中,我在我的方言中执行了以下操作:
/**
* Get the native identifier generator class.
*
* @return TableNameSequenceGenerator.
*/
@Override
Class<?> getNativeIdentifierGeneratorClass() {
TableNameSequenceGenerator
}
/**
* Creates a sequence per table instead of the default behavior of one sequence.
* From <a href='http://www.hibernate.org/296.html'>http://www.hibernate.org/296.html</a>
*/
static class TableNameSequenceGenerator extends SequenceGenerator {
/**
* {@inheritDoc}
* If the parameters do not contain a {@link SequenceGenerator#SEQUENCE} name, we
* assign one based on the table name.
*/
@Override
void configure(final Type type, final Properties params, final Dialect dialect) {
Boolean sequencePerTable = Holders.config.getProperty(SEQUENCE_PER_TABLE, Boolean, true)
if (sequencePerTable) {
if (!params.getProperty(SEQUENCE)) {
String tableName = params.getProperty(TABLE)
String schemaName = params.getProperty('schemaName')
if (schemaName) {
params.setProperty(SCHEMA, schemaName)
}
if (tableName) {
params.setProperty(SEQUENCE, "seq_${tableName}")
}
}
}
super.configure(type, params, dialect)
}
}
您可以在此处查看完整代码:https://github.com/kaleidos/grails-postgresql-extensions/blob/master/src/main/groovy/net/kaleidos/hibernate/PostgresqlExtensionsDialect.groovy#L53 我正在尝试迁移到Hibernate 5,但不知道如何配置以前的行为。我已修改了代码以扩展自
SequenceStyleGenerator
,因为现在SequenceGenerator
已被弃用,但我的代码从未执行。我认为这与方法getNativeIdentifierGeneratorClass
也被弃用有关。我一直在寻找一种创建自定义序列的方法,但我发现的所有示例都集中在使用序列生成器注释我的域类上。我要寻找的是以全局方式定义所有序列的方法。
spring.jpa.hibernate.use-new-id-generator-mappings: true
config is required inapplication.yml
in order to useSequenceStyleGenerator
- dmahapatrogetNativeIdentifierGeneratorClass()
可以被替换为getNativeIdentifierGeneratorStrategy()
,它返回一个String
。 - dmahapatrouse-new-id-generator-mappings
在 Grails 应用程序中可能无法工作,因为它是特定于 Spring Data JPA 的。 - dmahapatro