Hibernate:使用update=";“真的”;并在hbm2ddl工具中输出文件名

Hibernate:使用update=";“真的”;并在hbm2ddl工具中输出文件名,hibernate,Hibernate,我试图将生成的DDL导出到输出文件中,而不是直接显示在命令提示符中,以获取hbm2ddl.auto=update(使用自动模式生成) 我知道这可能不是一个好主意,使用它为生产数据库生成模式。我已经读过了谈论这件事的线索 我正在尝试将其用于开发/测试数据库 但是,我在这里面临的挑战是,即使我在hbm2ddl中使用“outputfilename”属性,它也不会将生成的DDL发送到输出文件 出口商。 (按此) 下面是我的build.xml的样子。我正在使用Hibernate的Jpa配置 <ta

我试图将生成的DDL导出到输出文件中,而不是直接显示在命令提示符中,以获取hbm2ddl.auto=update(使用自动模式生成)

我知道这可能不是一个好主意,使用它为生产数据库生成模式。我已经读过了谈论这件事的线索

我正在尝试将其用于开发/测试数据库

但是,我在这里面临的挑战是,即使我在hbm2ddl中使用“outputfilename”属性,它也不会将生成的DDL发送到输出文件
出口商。 (按此)

下面是我的build.xml的样子。我正在使用Hibernate的Jpa配置

<taskdef name="hibernatetool" classname="org.hibernate.tool.ant.HibernateToolTask"     classpathref="classpath.hibernate" />

<target name="db_update_schema_sql" depends="db_config"
        description="create SQL script for updating schema">
    <hibernatetool destdir="${out.dir}">
       <jpaconfiguration persistenceunit="${persistence.unit.name}"/>
       <classpath path="${build.classes.dir}"/>             
       <hbm2ddl export="false" create="false" update="true" drop="false"     outputfilename="update.sql" delimiter=";" format="true"/>          
    </hibernatetool>
</target>

<target name="db_full_update" depends="db_config" description="Updates database">
    <antcall target="db_update_schema_sql" />
</target>

如果有人使用此update=“true”功能直接向文件生成ddl,请向我解释他们是如何做到的,我将不胜感激

另外,如果您使用这个补丁,可以告诉我您是如何将补丁应用到现有Jar文件的

谢谢,
SM

直接使用相关的类即可

Connection connection = DriverManager.getConnection( dbUrl, dbUsername, dbPassword );
connection.setSchema (dbSchema);
Dialect dialect = ...; // eg, new MySQL5InnoDBDialect();
DatabaseMetadata metadata = new DatabaseMetadata( connection, dialect, null );

Configuration cfg = new Configuration();
cfg.addAnnotatedClass(...); // or read from xml
cfg.buildMappings();
List<SchemaUpdateScript> updateScritps = cfg.generateSchemaUpdateScriptList( dialect, metadata );

for ( SchemaUpdateScript script : updateScritps ) 
{
    String formatted = FormatStyle.DDL.getFormatter().format (script.getScript());

    // Replace with writing to file:
    System.out.println( formatted + ";" );
}
Connection-Connection=DriverManager.getConnection(dbUrl、dbUsername、dbPassword);
连接。设置模式(dbSchema);
方言=…;//例如,新的mysql5innodbdial();
DatabaseMetadata=新的DatabaseMetadata(连接、方言、空);
Configuration cfg=新配置();
cfg.addAnnotatedClass(…);//或者从xml中读取
cfg.buildMappings();
List updateScritps=cfg.generateSchemaUpdateScriptList(方言,元数据);
for(SchemaUpdateScript脚本:updateScritps)
{
String formatted=FormatStyle.DDL.getFormatter().format(script.getScript());
//替换为写入文件:
System.out.println(格式为+“;”);
}
程序员是为了编程,而不是为了对抗XML


还可以查看org.hibernate.tool.hbm2ddl.SchemaUpdate的源代码,只需直接使用相关类即可

Connection connection = DriverManager.getConnection( dbUrl, dbUsername, dbPassword );
connection.setSchema (dbSchema);
Dialect dialect = ...; // eg, new MySQL5InnoDBDialect();
DatabaseMetadata metadata = new DatabaseMetadata( connection, dialect, null );

Configuration cfg = new Configuration();
cfg.addAnnotatedClass(...); // or read from xml
cfg.buildMappings();
List<SchemaUpdateScript> updateScritps = cfg.generateSchemaUpdateScriptList( dialect, metadata );

for ( SchemaUpdateScript script : updateScritps ) 
{
    String formatted = FormatStyle.DDL.getFormatter().format (script.getScript());

    // Replace with writing to file:
    System.out.println( formatted + ";" );
}
Connection-Connection=DriverManager.getConnection(dbUrl、dbUsername、dbPassword);
连接。设置模式(dbSchema);
方言=…;//例如,新的mysql5innodbdial();
DatabaseMetadata=新的DatabaseMetadata(连接、方言、空);
Configuration cfg=新配置();
cfg.addAnnotatedClass(…);//或者从xml中读取
cfg.buildMappings();
List updateScritps=cfg.generateSchemaUpdateScriptList(方言,元数据);
for(SchemaUpdateScript脚本:updateScritps)
{
String formatted=FormatStyle.DDL.getFormatter().format(script.getScript());
//替换为写入文件:
System.out.println(格式为+“;”);
}
程序员是为了编程,而不是为了对抗XML

还可以查看org.hibernate.tool.hbm2ddl.SchemaUpdate的源代码