Het korte antwoord is nee, er is geen gemakkelijke manier om dit te doen. Ik heb echter een oplossing gevonden die wel werkt. In principe moet je een aangepast dialect implementeren. Hier is een implementatie (let op de originele bron van de implementatie in de opmerkingen).
package com.my.custom;
import java.util.Properties;
import org.hibernate.dialect.Dialect;
import org.hibernate.dialect.PostgreSQLDialect;
import org.hibernate.id.PersistentIdentifierGenerator;
import org.hibernate.id.SequenceGenerator;
import org.hibernate.type.Type;
/**
* 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>
* @author Burt
*/
public class TableNameSequencePostgresDialect extends PostgreSQLDialect {
/**
* Get the native identifier generator class.
* @return TableNameSequenceGenerator.
*/
@Override
public Class<?> getNativeIdentifierGeneratorClass() {
return TableNameSequenceGenerator.class;
}
/**
* Creates a sequence per table instead of the default behavior of one sequence.
*/
public 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
public void configure(
final Type type,
final Properties params,
final Dialect dialect) {
if (params.getProperty(SEQUENCE) == null
|| params.getProperty(SEQUENCE).length() == 0) {
String tableName = params.getProperty(PersistentIdentifierGenerator.TABLE);
if (tableName != null) {
params.setProperty(SEQUENCE, "seq_" + tableName);
}
}
super.configure(type, params, dialect);
}
}
}
De bovenstaande implementatie moet worden opgeslagen als TableNameSequencePostgresDialect.java
onder src/java/com/my/custom
binnen uw Grails-project.
Update vervolgens uw DataSource.groovy
om dit nieuwe aangepaste dialect te gebruiken.
dialect = com.my.custom.TableNameSequencePostgresDialect
Dat is het zo'n beetje. Niet gemakkelijk maar het kan.