Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Grails-创建数据库视图_Java_Mysql_Hibernate_Grails_Gorm - Fatal编程技术网

Java Grails-创建数据库视图

Java Grails-创建数据库视图,java,mysql,hibernate,grails,gorm,Java,Mysql,Hibernate,Grails,Gorm,我对Grails2.4.4(hibernate4和MySQL)很感兴趣,我试图创建一个数据库视图来查看不同表中的数据 我看了这一页: 问题是Gorm正在创建一个表而不是一个视图。此外,它只创建列id为的表 我已定义了以下文件: DataSource.groovy dataSource { pooled = true jmxExport = true driverClassName = "com.mysql.jdbc.Driver" username = "--"

我对Grails2.4.4(hibernate4和MySQL)很感兴趣,我试图创建一个数据库视图来查看不同表中的数据

我看了这一页:

问题是Gorm正在创建一个表而不是一个视图。此外,它只创建列id为的表

我已定义了以下文件:

DataSource.groovy

dataSource {
    pooled = true
    jmxExport = true
    driverClassName = "com.mysql.jdbc.Driver"
    username = "--"
    password = "--"
    configClass = gr8conf.DdlFilterConfiguration <--
}

最后,我无法直接使用Hibernate映射。 所以我找到了另一种方法,使用
迁移插件

它允许您在创建数据库后更改数据库

更多信息:

如果GORM创建视图而不是表,则DdlFilterConfiguration不起作用。 您选择DdlFilterConfiguration.groovy而不是DdlFilterConfiguration.java的原因

 package gr8conf;

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.dialect.HSQLDialect; 
import org.hibernate.tool.hbm2ddl.DatabaseMetadata; 

public class DdlFilterConfiguration extends GrailsAnnotationConfiguration {
    private static final String [] IGNORED_NAMES = {"v_convocatorias"};

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

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

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

     private String[] prune(String[] script, Dialect dialect) { 
             if (dialect instanceof HSQLDialect) { 
                     // do nothing for test env 
                     return script; 
             } 

             List<String> pruned = new ArrayList<String>(); 
             for (String command : script) { 
                     if (!isIgnored(command)) { 
                             pruned.add(command); 
                     } 
             } 

             return pruned.toArray(new String[pruned.size()]); 
     } 

    private boolean isIgnored(String command) {
        command = command.toLowerCase();
        for(String table: IGNORED_NAMES) {
            if(command.startsWith("create table " + table + " ")||
                command.startsWith("alter table " + table + " ")||
                command.startsWith("drop table " + table)||
                command.startsWith("drop table if exists " + table)) {

                return true;
            }
        }
        return false;
    }
}
    <?xml version='1.0' encoding='utf-8'?>
    <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
    <hibernate-configuration>
    <session-factory>
        <mapping resource='misc.mysql.innodb.hbm.xml' />
    </session-factory>
</hibernate-configuration>
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mappin DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping>
    <database-object>
        <create>
            CREATE OR REPLACE VIEW v_convocatorias AS
                SELECT c.titulo, c.descripcion, d.nombre nombre_departamento
                FROM convocatoria c, departamento d
                WHERE d.id = c.departamento_id
        </create>

        <drop>DROP VIEW IF EXISTS v_convocatorias</drop>

        <dialect-scope
            name='org.hibernate.dialect.MySQLInnoDBDialect' />

    </database-object>
</hibernate-mapping>
class Convocatorias {

    def titulo
    def descripcion
    def nombreDepartamento

    static mapping = {
        table 'v_convocatorias'
        version false
        titulo column:'titulo'
        descripcion column:'descripcion'
        nombreDepartamento column:'nombre_departamento'
    }
}