gpt4 book ai didi

grails 有限的表创建

转载 作者:行者123 更新时间:2023-12-04 22:16:31 27 4
gpt4 key购买 nike

我想使用 Grails 功能在有限的基础上创建/更新数据库表。具体来说,我希望 Grails 管理一些表,但不是全部。

有没有办法限制 Grails 管理的表,或者它是全有还是全无?

最佳答案

总的来说,这是全有或全无,因为 Grails 使用 Hibernate 的 HBM2DDL 功能。但是您可以使用自定义配置子类拦截该过程。这是一个扩展 GrailsAnnotationConfiguration 并覆盖所有三种 SQL 生成方法的示例:

package com.yourcompany.yourapp;

import java.util.ArrayList;
import java.util.List;

import org.codehaus.groovy.grails.orm.hibernate.cfg.GrailsAnnotationConfiguration;
import org.hibernate.HibernateException;
import org.hibernate.dialect.Dialect;
import org.hibernate.tool.hbm2ddl.DatabaseMetadata;

public class MyConfiguration extends GrailsAnnotationConfiguration {

private static final String[] IGNORE_NAMES = { "foo", "bar" };

@Override
public String[] generateDropSchemaScript(Dialect dialect) throws HibernateException {
return prune(super.generateDropSchemaScript(dialect));
}

@Override
public String[] generateSchemaCreationScript(Dialect dialect) throws HibernateException {
return prune(super.generateSchemaCreationScript(dialect));
}

@Override
public String[] generateSchemaUpdateScript(Dialect dialect, DatabaseMetadata databaseMetadata)
throws HibernateException {
return prune(super.generateSchemaUpdateScript(dialect, databaseMetadata));
}

private String[] prune(String[] script) {
List<String> pruned = new ArrayList<String>();
for (String command : script) {
for (String ignoreName : IGNORE_NAMES) {
if (!command.toLowerCase().contains(" table " + ignoreName + " ")) {
pruned.add(command);
}
}
}
return pruned.toArray(new String[pruned.size()]);
}
}

您不需要覆盖所有三个,例如您可以让创建通过但删除更新。

这在 grails-app/conf/DataSource.groovy 中注册:
dataSource {
pooled = true
driverClassName = ...
username = ...
password = ...
configClass = com.yourcompany.yourapp.MyConfiguration
}

请注意,该类必须用 Java 编写,因为基类中的私有(private)方法与 Groovy 添加到所有 groovy 类的方法发生冲突。

关于grails 有限的表创建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3935088/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com