【问题标题】:Override default sequence name in Grails覆盖 Grails 中的默认序列名称
【发布时间】:2010-12-10 19:50:59
【问题描述】:

如何重命名HIBERNATE_SEQUENCE?为每个表生成一个序列(并为这些序列指定特定名称)的方法有据可查,但这不是我想要的。

我不介意所有域类共享一个序列。我只需要给它一个特定于应用程序的名称。

【问题讨论】:

    标签: grails


    【解决方案1】:

    Hibernate JIRA 中似乎有一个开放功能/增强请求,以使其全局可配置:Make the default sequence name globally configurable。我相信,作为一种解决方法,您必须将每个 @Id 字段的所有域类的“生成器”属性设置为相同的名称(默认为 hibernate_sequence)。见oracle sequence created

    正如您在问题中暗示的那样,可能有一种方法可以通过子类化您的数据库方言来做到这一点 - 正如许多人建议的每表序列方法一样。

    id generator and DRY principle

    【讨论】:

    • 我似乎已经成功扩展了 org.hibernate.id.SequenceGenerator 和方言。
    【解决方案2】:

    这是我用来设置序列名称的代码。

    首先,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);
        }
    
    }
    

    接下来,甲骨文方言:

    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'
    }
    

    【讨论】:

      【解决方案3】:
      猜你喜欢
      • 1970-01-01
      • 2015-09-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-04
      • 2013-05-13
      • 1970-01-01
      • 2012-10-13
      相关资源
      最近更新 更多