Comment puis-je renommer hibernate_sequence? Les méthodes pour générer une séquence par table (et donner des noms spécifiques à ces séquences) sont bien documentées, mais ce n'est pas ce que je cherche. Cela ne me dérange pas d'avoir une séquence partagée par toutes les classes de domaine - j'ai juste besoin de lui donner un nom spécifique à l'application.Remplacer le nom de séquence par défaut dans Grails
Répondre
Il semble y avoir une demande de fonctionnalité/amélioration ouverte dans la JIRA Hibernate pour la rendre globalement configurable: Make the default sequence name globally configurable. Je crois que, pour contourner le problème, vous devez définir l'attribut 'generator' sur le même nom pour toutes les classes de domaine (par défaut hibernate_sequence) pour chaque champ @Id. Voir oracle sequence created.
Comme vous avez fait allusion dans votre question, il pourrait y avoir un moyen de le faire par votre dialecte sous-classement base de données - comme beaucoup l'ont suggéré une séquence par table approche.
est la séquence Changement de nom à mon humble avis ne sont pas directement possible, mais vous pourriez personnaliser l'identité comme décrit http://www.grails.org/doc/latest/guide/5.%20Object%20Relational%20Mapping%20(GORM).html#5.5.2.4%20Custom%20Database%20Identity au générateur: « natif ». Voir http://docs.jboss.org/hibernate/stable/core/reference/en/html/mapping.html#mapping-declaration-id-generator pour plus de détails.
Voici le code que j'utilisé pour définir le nom de la séquence.
D'abord, le SequenceGenerator:
package com.foo;
import java.util.Properties;
import org.hibernate.MappingException;
import org.hibernate.dialect.Dialect;
import org.hibernate.id.SequenceGenerator;
import org.hibernate.type.Type;
public class TableNameSequenceGenerator extends SequenceGenerator {
public static final String CUSTOM_SEQUENCE_NAME = "MYAPP_SEQUENCE"
public void configure(Type type, Properties params, Dialect dialect) throws MappingException {
if(params.getProperty(SEQUENCE) == null || params.getProperty(SEQUENCE).length() == 0) {
String seqName = CUSTOM_SEQUENCE_NAME;
params.setProperty(SEQUENCE, seqName);
}
super.configure(type, params, dialect);
}
}
Ensuite, le OracleDialect:
package com.foo;
import org.hibernate.dialect.Oracle10gDialect;
public class MyAppOracleDialect extends Oracle10gDialect {
public Class getNativeIdentifierGeneratorClass() {
return TableNameSequenceGenerator.class;
}
}
dernier, DataSource.groovy a besoin de connaître le dialecte:
dataSource {
pooled = true
driverClassName = "oracle.jdbc.OracleDriver"
// username, password....
dialect='com.foo.MyAppOracleDialect'
}
Il me semble avoir eu succès en étendant org.hibernate.id.SequenceGenerator et le dialecte. –