Экспорт схемы со спящими аннотациями - PullRequest
13 голосов
/ 03 августа 2010

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

Аналогично схеме экспортирования с файлами hbm xml.

Ответы [ 4 ]

11 голосов
/ 03 августа 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>);
7 голосов
/ 03 августа 2010

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

Вот пример использования, адаптированный из Java Persistence с 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>

См. Также

6 голосов
/ 19 января 2011

Если кому-то интересно, как это сделать с помощью 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 содержится настроенный компонент entityManagerFactory с аннотацией.Хитрость заключается в том, чтобы внедрить его с помощью & как это: "& entityManagerFactory", чтобы разыменовать прокси, сгенерированный пружиной.

3 голосов
/ 14 июля 2011

Используйте hibernate3-maven-plugin.Затем запустите 'mvn hibernate3: hbm2ddl'

...