2009-04-22 8 views
19

Estoy jugando con algunas cosas de JPA, cambiando las asignaciones para ver cómo se supone que son, etc. Es una experimentación básica. Sin embargo, no puedo encontrar una herramienta que simplemente lea mis entidades y genere el esquema de la tabla para mí. Intenté encontrar algo como esto en las herramientas de JBoss, pero nada. La integración de Eclipse será una gran ventaja, pero tomaré una herramienta de línea de comando o una tarea de hormiga.DDL de ingeniero inverso de entidades JPA

¿Alguna idea?

Respuesta

8

No creo que exista una forma universal de hacer esto con JPA, tiene que usar directamente la implementación subyacente de JPA para lograr esto.

Para Hibernate, hay varias posibilidades:

  • Utilice el método duffymo publicado anteriormente, que hace que Hibernate actualizar el esquema de base de datos automáticamente.
  • Si usted no quiere eso, se puede utilizar la herramienta hbm2ddl de Hibernate Tools (nota: Enlace chupa, pero al parecer su página de inicio es un poco roto en este momento). Puede usar eso para generar automáticamente secuencias de comandos de creación de base de datos desde sus entidades JPA; también hay complementos para Maven y Ant que invocan automáticamente el hbm2ddl.

Para EclipseLink (anteriormente Oracle TopLink, la APP 2.0 RI) ver Using EclipseLink JPA Extensions for Schema Generation. En principio es muy similar a Hibernate, aunque a primera vista no veo nada que pueda usarse como una utilidad independiente para crear un script DB.

Otras implementaciones de JPA (BEA/Oracle Kodo, Apache OpenJPA) probablemente tengan sus propios métodos específicos para lograr esto.

6

Cuando uso de Hibernate Simplemente añadir a mi fichero de configuración:

 <property name="hbm2ddl.auto">update</property> 

se encarga de todo. No estoy seguro de cuál es el equivalente para JPA, pero está tan influenciado por Hibernate que me sorprendería si no pudieras encontrar algo similar.

No se necesita herramienta. Normalmente solo ejecuto una prueba simple de JUnit y la base de datos se crea para mí.

2

DataNucleus tiene su propia SchemaTool capaz de generar el esquema por usted, o generar las declaraciones DDL necesarias para que usted pueda adaptarse y aplicarse usted mismo.

--Andy (DataNucleus)

16

Trate de añadir lo siguiente a su persistencia.xml

Para Hibernate:

crear:

<property name="hibernate.hbm2ddl.auto" value="update"/> 

a caer y crear:

<property name="hibernate.hbm2ddl.auto" value="create-drop"/> 

Para Toplink:

crear:

<property name="toplink.ddl-generation" value="create-tables"/> 

Para soltar y crear:

<property name="toplink.ddl-generation" value="drop-and-create-tables"/> 

Para EclipseLink:

crear:

<property name="eclipselink.ddl-generation" value="create-tables"/> 

a caer y crear:

<property name="eclipselink.ddl-generation" value="drop-and-create-tables"/> 
2

Agregando a la lista de James McMahon:

Para OpenJPA:

<property name="openjpa.jdbc.SynchronizeMappings" value="buildSchema(ForeignKeys=true)"/> 
4

utilizo clase de Hibernate org.hibernate.tool.hbm2ddl.SchemaExport y este pequeño método para

generar el esquema de la base de datos:

public static void rebuildSchema() 
{ 
    configuration = new Configuration(); 
    configuration.configure(); 

    new SchemaExport(configuration) 
     .setHaltOnError(true) 
     .execute(false, true, false, false); 
} 

para crear el DDL en un archivo externo, use esta llamada al execute.

 new SchemaExport(configuration) 
     .setHaltOnError(true) 
     .setOutputFile(outputFile) 
     .setImportFile("") 
     .setDelimiter(";") 
     .setFormat(true) 
     .execute(false, false, false, true); 

Se considera mala forma de ajustar "hibernate.hbm2ddl.auto" a "actualizar", ya que el cambio automático de la base de datos de producción pueden romperlo. Para una explicación, vea Hibernate hbm2ddl.auto possible values and what they do?.

4

Por plugin de Maven:

 <plugin> 
      <!-- run "mvn hibernate3:hbm2ddl" to generate a schema --> 
      <groupId>org.codehaus.mojo</groupId> 
      <artifactId>hibernate3-maven-plugin</artifactId> 
      <version>3.0</version> 
      <configuration> 
       <hibernatetool> 
        <classpath> 
         <path location="${project.build.directory}/classes" /> 
         <path location="${project.basedir}/src/main/resources/META-INF/" />            
        </classpath> 

        <jpaconfiguration persistenceunit="galleryPersistenceUnit" />      
        <hbm2ddl create="true" export="false" destdir="${project.basedir}/target" drop="true" outputfilename="mysql.sql" format="true" console="true"/> 
       </hibernatetool> 
      </configuration> 
     </plugin> 
0

Antonio Goncalves dice en su blog sobre API para generar el esquema.
En JPA 2.1 generateSchema se introdujo el método para este propósito.

Ejemplo de blog:

public class Main { 
    public static void main(String[] args) { 
     Persistence.generateSchema("samplePU", null); 
    } 
} 
Cuestiones relacionadas