Переопределить имя последовательности по умолчанию в Grails - PullRequest
3 голосов
/ 10 декабря 2010

Как я могу переименовать HIBERNATE_SEQUENCE?Методы генерации одной последовательности для каждой таблицы (и присвоения определенных имен этим последовательностям) хорошо документированы, но это не то, что я ищу.Я не против, чтобы одна последовательность использовалась всеми классами домена - мне просто нужно дать ей имя для конкретного приложения.

Ответы [ 3 ]

2 голосов
/ 14 мая 2011

Вот код, который я использовал для установки имени последовательности.

Во-первых, генератор последовательности:

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);
    }

}

Далее, OracleDialect:

package com.foo;

import org.hibernate.dialect.Oracle10gDialect;

public class MyAppOracleDialect extends Oracle10gDialect {
    public Class getNativeIdentifierGeneratorClass() {
        return TableNameSequenceGenerator.class;
    }
}

Наконец, DataSource.groovy должен знать о диалекте:

dataSource {
    pooled = true
    driverClassName = "oracle.jdbc.OracleDriver"
    // username, password....
    dialect='com.foo.MyAppOracleDialect'
}
1 голос
/ 15 декабря 2010

В Hibernate JIRA, по-видимому, имеется открытый запрос на функцию / расширение, чтобы сделать его глобально настраиваемым: Сделать имя последовательности по умолчанию глобально настраиваемым . Я считаю, что в качестве обходного пути, вы должны установить атрибут «generator» для одного и того же имени для всех классов домена (по умолчанию hibernate_sequence) для каждого поля @Id. Смотрите последовательность оракула создана .

Как вы намекали в своем вопросе, возможно, есть способ сделать это, подклассифицируя свой диалект базы данных - как многие предлагали для подхода «последовательность в таблице».

См. генератор идентификаторов и принцип DRY

0 голосов
/ 11 декабря 2010

Переименование последовательности ИМХО напрямую невозможно, но вы можете настроить идентификатор, как описано в http://www.grails.org/doc/latest/guide/5.%20Object%20Relational%20Mapping%20(GORM).html#5.5.2.4%20Custom%20Database%20Identity, для генератора: 'native'. Подробнее см. http://docs.jboss.org/hibernate/stable/core/reference/en/html/mapping.html#mapping-declaration-id-generator.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...