Экспорт схемы с аннотациями спящего режима

Я использую аннотации гибернации и хочу экспортировать схему своей базы данных.

Аналогично schemaexporttask с файлами hbm xml.


person Anthony    schedule 03.08.2010    source источник


Ответы (4)


Действительно, исходный Hibernate Core SchemaExportTask может обрабатывать только файлы сопоставления Hibernate XML, но не аннотации. Вам нужен HibernateToolTask, который поставляется с инструментами Hibernate.

Вот пример использования, адаптированный из Java Persistence With Hibernate:

<taskdef name="hibernatetool"
         classname="org.hibernate.tool.ant.HibernateToolTask"
         classpathref="project.classpath"/>
  <target name="schemaexport" depends="compile, copymetafiles"
          description="Exports a generated schema to DB and file">
    <hibernatetool destdir="${basedir}">
      <classpath path="${build.dir}"/>
      <configuration 
          configurationfile="${build.dir}/hibernate.cfg.xml"/>
      <hbm2ddl
          drop="true"
          create="true"
          export="true"
          outputfilename="helloworld-ddl.sql"
          delimiter=";"
          format="true"/>
    </hibernatetool>
</target>

Смотрите также

person Pascal Thivent    schedule 03.08.2010

Вы можете. Просто сделай это

AnnotationConfiguration configuration = new AnnotationConfiguration();

configuration
.addAnnotatedClass(<TYPE_YOUR_CLASS>.class)
.setProperty(Environment.USER, <TYPE_YOUR_USER>)
.setProperty(Environment.PASS, <TYPE_YOUR_PASSWORD>)
.setProperty(Environment.URL, <TYPE_YOUR_URL>)
.setProperty(Environment.DIALECT, <TYPE_YOUR_DIALECT>)
.setProperty(Environment.DRIVER, <TYPE_YOUR_DRIVER>);

SchemaExport schema = new SchemaExport(configuration);
schema.setOutputFile("schema.sql");

schema.create(<DO_YOU_WANT_TO_PRINT_TO_THE_CONSOLE>, <DO_YOU_WANT_TO_EXPORT_THE_SCRIPT_TO_THE_DATABASE>);
person Arthur Ronald    schedule 03.08.2010
comment
Это выглядит интересно. Нужны ли мне дополнительные библиотеки для этого? - person Anthony; 04.08.2010
comment
@ Энтони Нет, он поставляется в комплекте с Hibernate. - person Arthur Ronald; 04.08.2010
comment
Какое предпочтительное решение для Hibernate 3.5+? - person David; 16.06.2015

Если кому-то интересно, как это сделать с помощью JPA+Spring из модульного теста (вы можете легко сгенерировать sql, запускающий модульный тест, изнутри Eclipse):

ExportDatabaseSchema.java:


@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration
@TransactionConfiguration(defaultRollback=true)
public class ExportDatabaseSchema {

  @Resource(name="&entityManagerFactory")
  private LocalContainerEntityManagerFactoryBean entityManagerFactory;

  @Test
  public void exportDatabaseSchema(){
    PersistenceUnitInfo persistenceUnitInfo = entityManagerFactory.getPersistenceUnitInfo();
    Map jpaPropertyMap = entityManagerFactory.getJpaPropertyMap();

    Configuration configuration = new Ejb3Configuration().configure( persistenceUnitInfo, jpaPropertyMap ).getHibernateConfiguration();

    SchemaExport schema = new SchemaExport(configuration);
    schema.setOutputFile("resources/sql/schema.sql");
    schema.create(false, false);
  }
}

Вам нужен ExportDatabaseSchema-context.xml:

<beans xmlns="http://www.springframework.org/schema/beans"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns:context="http://www.springframework.org/schema/context"
   xmlns:p="http://www.springframework.org/schema/p"
   xsi:schemaLocation="http://www.springframework.org/schema/beans 
       http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
       http://www.springframework.org/schema/context
       http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<import resource="classpath:applicationContext-jpa.xml" /> 
</beans>

ApplicationContext-jpa.xml содержит настроенный аннотацией bean-компонент entityManagerFactory. Хитрость заключается в том, чтобы внедрить его с помощью &, например: «&entityManagerFactory», чтобы разыменовать сгенерированный spring прокси.

person Norbert Madarász    schedule 19.01.2011

Используйте плагин hibernate3-maven. Затем запустите «mvn hibernate3:hbm2ddl».

person YNChumak    schedule 14.07.2011