Ich möchte einen benutzerdefinierten Sequenzgenerator in Hibernate 5 erstellen, um eine Sequenz pro Tabelle in PostgreSQL zu erstellen. Mit Hibernate 4 Ich habe folgend in meinem Dialekt:Benutzerdefinierte Sequenzgenerator für Hibernate 5
/**
* 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)
}
}
Sie können den vollständigen Code sehen hier: https://github.com/kaleidos/grails-postgresql-extensions/blob/master/src/main/groovy/net/kaleidos/hibernate/PostgresqlExtensionsDialect.groovy#L53
Ich versuche Hibernate 5 zu migrieren, aber ich weiß nicht, wie das konfigurieren vorheriges Verhalten. Ich habe den Code geändert, um von SequenceStyleGenerator
zu erweitern, da jetzt SequenceGenerator
veraltet ist, aber mein Code nie ausgeführt wird. Ich denke, das hat damit zu tun, dass auch die Methode getNativeIdentifierGeneratorClass
veraltet ist.
Ich habe nach einer Möglichkeit gesucht, eine benutzerdefinierte Sequenz zu erstellen, aber alle Beispiele, die ich gefunden habe, konzentrieren sich darauf, meine Domänenklasse mit dem Sequenzgenerator zu kommentieren. Ich suche nach einer Möglichkeit, alle Sequenzen global zu definieren.
'spring.jpa.hibernate.use-new-ID-Generator-Mappings: true' Config erforderlich in' application.yml' um 'SequenceStyleGenerator' zu verwenden – dmahapatro
Auf einer Seite zur Kenntnis,' getNativeIdentifierGeneratorClass () 'kann durch' getNativeIdentifierGeneratorStrategy() 'ersetzt werden, die einen' String' zurückgeben – dmahapatro
'use-new-id-generator-mappings' funktioniert möglicherweise nicht in einer Grails-App, da dies für Spring-Daten jpa spezifisch ist. – dmahapatro