IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Eclipse Java Discussion :

[hibernate] Automatic schema generation


Sujet :

Eclipse Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut [hibernate] Automatic schema generation
    Bonjour à tous,

    Je sais déjà utilisé hibernate sur eclipse et je sais maintenant comment faire pour effectuer des requests. Je voudrais donc aller plus loin ...

    Je recherche un exemple simple ou une bonne doc (qui n'est pas la doc officielle) pour créer automatiquement un shema db avec hibernate. (via ant ou un autre outil).
    Quelqu'un pourrait me mettre sur la voie et/ou me dire ou je peux trouver de la doc ?
    Merci d'avance
    Septentryon

  2. #2
    Membre confirmé
    Inscrit en
    Juin 2004
    Messages
    57
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 57
    Par défaut
    Petit bout de ant permettant d'exporter un fichier SQL de création et de créer directement la base grâce au jdbc:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
      <target name="schemaexport">	
    	   	<taskdef name="schemaexport"
            	classname="net.sf.hibernate.tool.hbm2ddl.SchemaExportTask"
            	classpathref="classpath" />
    	    <schemaexport
    	        properties="hibernate.properties"
    	        quiet="no"
    	        text="no"
    	        drop="no"
    	        delimiter=";"
    	        output="${basedir}/../sql/schema-export.sql">
    	        <fileset dir="${src.core}">
    	            <include name="**/*.hbm.xml"/>
    	        </fileset>
    	    </schemaexport>
       </target>
    le fichier hibernate.properties contient les propriétés pr la connection JDBC

  3. #3
    Invité
    Invité(e)
    Par défaut Merci
    Merci, mais je reste un peu dans le gaz. Je comprends plus ou moins à quoi sert ce ficher mais je ne sais pas du tout comment tout faire fonctionner. N'ayant même jamais utilisé ant ;-)
    Je ne veux pas vraiment un step by step mais un peu plus d'informations sur 'ou mettre quoi', et comment lancer le script ant.
    Un point positif tout de même, j'ai déjà un fichier hbm.
    Merci d'avance
    septentryon

  4. #4
    Membre confirmé
    Inscrit en
    Juin 2004
    Messages
    57
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 57
    Par défaut
    Voila mon script ant:

    <?xml version="1.0"?>

    <project name="tender" basedir="." default="codegen">

    <property file="build.properties"/>
    <property file="hibernate.properties"/>
    <property name="name" value="tender"/>
    <property name="version" value="1.0"/>
    <property name="debug" value="true" />
    <property name="deprecation" value="false" />
    <property name="optimize" value="false" />
    <property name="root" value="./../.."/>
    <property name="webapp.dir" value="${root}/webapp"/>
    <property name="lib.runtime.dir" value="${webapp.dir}/WEB-INF/lib"/>
    <property name="src.core" value="${root}/src/core/com/bourbonmaritime/tender"/>

    <path id="classpath">
    <fileset dir="${lib.runtime.dir}">
    <include name="**/*.jar"/>
    <include name="**/*.zip"/>
    </fileset>
    <fileset dir="${basedir}/../hibernate/hibernate-extensions-2.1.3/tools">
    <include name="lib/*.jar"/>
    <include name="hibernate-tools.jar"/>
    </fileset>
    <dirset dir="${webapp.dir}/WEB-INF/classes"></dirset>
    </path>


    <target name="codegen"
    description="Generate Java source from the O/R mapping files"
    depends="schemaexport"
    >
    <taskdef name="hbm2java"
    classname="net.sf.hibernate.tool.hbm2java.Hbm2JavaTask"
    classpathref="classpath" />
    <hbm2java output="${basedir}/temp">
    <fileset dir="${src.core}">
    <include name="**/*.hbm.xml"/>
    </fileset>
    </hbm2java>
    </target>

    <target name="schemaexport">
    <taskdef name="schemaexport"
    classname="net.sf.hibernate.tool.hbm2ddl.SchemaExportTask"
    classpathref="classpath" />
    <schemaexport
    properties="hibernate.properties"
    quiet="no"
    text="no"
    drop="no"
    delimiter=";"
    output="${basedir}/../sql/schema-export.sql">
    <fileset dir="${src.core}">
    <include name="**/*.hbm.xml"/>
    </fileset>
    </schemaexport>
    </target>
    </project>
    A quoi sert'il? et bien a automatiser une suite de process qu'il serait fastidieux/compliqué de faire a la main a chaque fois...

    En fait c'est un script qui effectue juste les actions que tu lui dis de faire. Pour cela il s'appuie sur des variables/parametres:

    <project name="tender" basedir="." default="codegen">
    Ca definit juste un nom de projet, et quelle action il fera en premier. Les actions, ce sont simplement les balises <target>,

    <property file="build.properties"/>
    <property file="hibernate.properties"/>
    <property name="name" value="tender"/>
    <property name="version" value="1.0"/>
    <property name="debug" value="true" />
    <property name="deprecation" value="false" />
    <property name="optimize" value="false" />
    <property name="root" value="./../.."/>
    <property name="webapp.dir" value="${root}/webapp"/>
    <property name="lib.runtime.dir" value="${webapp.dir}/WEB-INF/lib"/>
    <property name="src.core" value="${root}/src/core/com/bourbonmaritime/tender"/>
    Ce sont les parametres. ce qui est important, c'est la definition des propriétés hibernate (lien vers le fichier hibernate.properties), et la définition des différents répertoires utilisés (la ou tu va stocker les classes auto générés, ici, src.core, et le repertoire ou tu stockes tes librairies (utile pour définir le classpath)


    <path id="classpath">
    <fileset dir="${lib.runtime.dir}">
    <include name="**/*.jar"/>
    <include name="**/*.zip"/>
    </fileset>
    <fileset dir="${basedir}/../hibernate/hibernate-extensions-2.1.3/tools">
    <include name="lib/*.jar"/>
    <include name="hibernate-tools.jar"/>
    </fileset>
    <dirset dir="${webapp.dir}/WEB-INF/classes"></dirset>
    </path>
    ce bout de script permet de définir le classpath, utilisé pour que ant puisse trouver les classes hibernates permettant de générer les classes et les cript SQL

    Dans la balise projet, on a définit l'action a effectuer en premier: codegen
    Dans la balise <target name="codegen">, on a l'attribut depends: ça signifit que cette action nécessite d'abord l'execution des autres actions nommées dans l'attribut, ici, schemaexport.

    Examinon schemaexport:

    <target name="schemaexport">
    <taskdef name="schemaexport"
    classname="net.sf.hibernate.tool.hbm2ddl.SchemaExportTask"
    classpathref="classpath" />
    <schemaexport
    properties="hibernate.properties"
    quiet="no"
    text="no"
    drop="no"
    delimiter=";"
    output="${basedir}/../sql/schema-export.sql">
    <fileset dir="${src.core}">
    <include name="**/*.hbm.xml"/>
    </fileset>
    </schemaexport>
    </target>
    classname="net.sf.hibernate.tool.hbm2ddl.SchemaExportTask" : c'est la classe qui effectue l'action d'export vers du SQL. Ce parametre ne change pas.
    classpathref="classpath": classpath definit plus haut où l'on va chercher la classe ci dessus,
    properties="hibernate.properties" : propriétés utilisées par la classe (connexion jdbc)
    output="${basedir}/../sql/schema-export.sql" l'endroit ou sera stocké ton script SQL,

    <fileset dir="${src.core}">
    <include name="**/*.hbm.xml"/>
    </fileset>

    La liste de fichier de mapping utilisés pour générer l'export,

    Une fois l'export fait, codegen est executé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
      <target name="codegen"
          description="Generate Java source from the O/R mapping files"
          depends="schemaexport"
          >
      	<taskdef name="hbm2java"
          	classname="net.sf.hibernate.tool.hbm2java.Hbm2JavaTask"
          	classpathref="classpath" />
        <hbm2java output="${basedir}/temp">
         <fileset dir="${src.core}">
           <include name="**/*.hbm.xml"/>
         </fileset>
        </hbm2java>
      </target>
    Ici, meme principe: on définit la tache qui va etre executée et on lui donne différent paramtres.

    Pour executer le script, j'utilise eclipse; le fichier est nommé build.xml, tu clique dessus avec le bouton droit et tu fais "run as ant build": le script s'exécute!!

    L'important c de comprendre la philosophie du truc, le reste n'est que question de parametres et d'adaptation a ta config...

Discussions similaires

  1. Réponses: 0
    Dernier message: 13/03/2011, 15h29
  2. spring hibernate postgres schema doesn't found
    Par Fennec. dans le forum Spring Web
    Réponses: 1
    Dernier message: 07/02/2011, 23h28
  3. [Hibernate] [Debutant]choix du generator d'id
    Par lilou77 dans le forum Hibernate
    Réponses: 5
    Dernier message: 07/12/2008, 16h01
  4. [Hibernate] Définir son propre id generator
    Par K-Kaï dans le forum Hibernate
    Réponses: 6
    Dernier message: 23/05/2006, 13h03
  5. [Hibernate] génération de beans
    Par frouge dans le forum Hibernate
    Réponses: 1
    Dernier message: 01/09/2005, 14h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo