мы пытались программно использовать функцию экспорта в файл hbm2ddl в hibernate 4.3.11 до сих пор безуспешно.Для этой задачи мы создали небольшую автономную утилиту, показанную ниже:
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.boot.registry.internal.StandardServiceRegistryImpl;
import org.hibernate.metamodel.MetadataSources;
import org.hibernate.metamodel.source.MetadataImplementor;
import org.hibernate.service.ServiceRegistry;
import org.hibernate.tool.hbm2ddl.SchemaExport;
public class HibernateSchemaGenerationUtil {
public static void main(String[] args) {
ServiceRegistry serviceReg = buildCfg();
MetadataImplementor metadata = (MetadataImplementor) new MetadataSources(serviceReg).buildMetadata();
SchemaExport schemaExport = new SchemaExport(metadata);
schemaExport.setOutputFile("hbm2schema.sql");
schemaExport.setHaltOnError(true);
System.out.println("Creating Output sql file at location: hbm2schema.sql");
schemaExport.create(true, false);
((StandardServiceRegistryImpl) serviceReg).destroy();
System.out.println("Done...");
}
public static StandardServiceRegistryImpl buildCfg() {
return (StandardServiceRegistryImpl) new StandardServiceRegistryBuilder()
.configure("hibernate.cfg.xml")
.build();
}
}
Используемый файл hibernate.cfg.xml:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="hbm2ddl.auto">create</property>
<property name="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property>
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/my_rsp_request_creation_test?useSSL=false</property>
<property name="hibernate.connection.username">bla</property>
<property name="hibernate.connection.password">bla-bla</property>
<property name="hibernate.current_session_context_class">thread</property>
<property name="hibernate.show_sql">true</property>
<property name="hibernate.format_sql">true</property>
<property name="hibernate.jdbc.batch_size">25</property>
<property name="hibernate.order_inserts">true</property>
<property name="hibernate.order_updates">true</property>
<property name="hibernate.max_fetch_depth">3</property>
<mapping resource="request_component.hbm.xml"/>
<mapping resource="request_contract.hbm.xml"/>
<mapping resource="request_dimensions.hbm.xml"/>
<mapping resource="request_product_attributes.hbm.xml"/>
<mapping resource="request_product_certificate.hbm.xml"/>
<mapping resource="request_product_characteristics_no_units.hbm.xml"/>
<mapping resource="request_product_characteristics_with_units.hbm.xml"/>
<mapping resource="request_product_custom_characteristics.hbm.xml"/>
<mapping resource="request_product_delivery_address.hbm.xml"/>
<mapping resource="request_product_payment_type.hbm.xml"/>
<mapping resource="request_product_risk.hbm.xml"/>
<mapping resource="request_product_version.hbm.xml"/>
<mapping resource="request_product_versioned_characteristics_no_units.hbm.xml"/>
<mapping resource="request_product_versioned_characteristics_with_units.hbm.xml"/>
<mapping resource="request_product_versioned_custom_characteristics.hbm.xml"/>
<mapping resource="request_product.hbm.xml"/>
<mapping resource="request_sanctions.hbm.xml"/>
<mapping resource="request_standby_date.hbm.xml"/>
<mapping resource="rsp_request_product.hbm.xml"/>
</session-factory>
</hibernate-configuration>
Программа работает без ошибок, но hbm2schema.sqlпроизводится пустой.На самом деле вывод выглядит следующим образом:
Οκτ 17, 2018 11:10:28 ΠΜ org.hibernate.Version Log Версия INFO: HHH000412: Hibernate Core {4.3.11.Final} Οκτ 17, 201811:10:28 ΠΜ org.hibernate.cfg.Environment INFO: HHH000206: hibernate.properties не найден Οκτ 17, 2018 11:10:28 ΠΜ org.hibernate.cfg.Environment buildBytecodeProvider INFO: HHH000021: имя поставщика байт-кода: javassist Ο17, 2018 11:10:29 ΠΜ org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure ПРЕДУПРЕЖДЕНИЕ: HHH000402: Использование встроенного пула соединений Hibernate (не для производственного использования!) 17κτ 17, 2018 11:10:29ΠΜ org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator ИНФОРМАЦИЯ: HHH000401: с помощью драйвера [com.mysql.jdbc.Driver] по URL-адресу [jdbc: mysql: // localhost: 3306 / my_rsp_reτrequest_ use_service)17, 2018 11:10:29 ΠΜ org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator INFO: HHH000046: Свойства соединения: {user = bla, password = ****} 17κτ 17, 2018 11:10:29 ΠΜ org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator ИНФОРМАЦИЯ: HHH000006: режим автоматической фиксации:false 17κτ 17, 2018 11:10:29 ΠΜ org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure INFO: HHH000115: Размер пула соединений Hibernate: 20 (мин = 1) 17κτ 17, 2018 11:10:30 ΠΜorg.hibernate.dialect.Dialect INFO: HHH000400: Использование dialect: org.hibernate.dialect.MySQL5InnoDBDialect Создание выходного файла sql по адресу: hbm2schema.sql Οκτ 17, 2018 11:10:30 ΠΜ org.hibernate.tool.hbmmalportвыполнить INFO: HHH000227: запуск экспорта схемы hbm2ddl 17 сентября 2018 11:10:30 ΠΜ org.hibernate.tool.hbm2ddl.SchemaExport выполнить INFO: HHH000230: экспорт схемы завершен 17 марта 2018 11:10:30 ΠΜ org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl stop ИНФОРМАЦИЯ: HHH000030: очистка подключенияn pool [jdbc: mysql: // localhost: 3306 / my_rsp_request_creation_test? useSSL = false] Готово ...
Фактически в соответствии с javadoc для schemaExport.create (true, false) сгенерированный sql должен даже отображаться на экране, поэтому не только выходной файл пуст, но и экспорт не отображается на экране.Любые предложения по этому кто-нибудь ??
Спасибо