views:

90

answers:

1

Hello, I am having troubles with generating database schema with Hibernate Tools. This is my ant file

    <project name="Schema generator for MySQL database" basedir=".">
 <description>
 This file is used for running Hibernate Tools Ant task.
    It is used to generate database schema based on hibernate configuration
    </description>

 <path id="toolslib">
  <path location="lib/hibernate-tools.jar" />
  <path location="lib/hibernate-3.2.4.ga.jar" />
  <path location="lib/freemarker.jar" />
  <path location="lib/mysql-connector-java-5.1.13" />
  <path location="lib/dom4j-1.6.1.jar" />
  <path location="hibernate_mappings/Address.hbm.xml" />
 </path>

 <taskdef name="hibernatetool" classname="org.hibernate.tool.ant.HibernateToolTask" classpathref="toolslib" />

 <hibernatetool destdir="${build.dir}/generated">
  <classpath>
   <path location="${build.dir}/classes" />
  </classpath>
  <configuration configurationfile="hibernate.cfg.xml" />
  <hbm2ddl />
  <hbm2dao />
 </hibernatetool>
</project>

I get this error when running ant task:

C:\work\gwt_workspace\billing-cms\dao\src\main\resources\build.xml:19: org.hibernate.MappingNotFoundException: resource: hibernate_mappings/Address.hbm.xml not found

My filesystem path hierarchy is like this:

+resources
   -hibernate_mappings
      -Address.hbm.xml
      -User.hbm.xml
      -etc..
   -hibernate.cfg.xml
   -build.xml

I have my mappings defined inside hibernate.hbm.xml like this:

<mapping resource="hibernate_mappings/Address.hbm.xml" />
A: 

You don't need Ant to do this. If you just run one Hibernate app (e.g., a dummy test or main), it'll run hbm2ddl for you.

Make sure the .hbm.xml files are in your Ant classpath when you run. Perhaps that's the problem. (Didn't look closely enough at your build.xml to know; just throwing it out there.)

Here's a sample Hibernate config that works, including hbm2ddl. Pattern yours after this:

<!DOCTYPE hibernate-configuration PUBLIC
    "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
    "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"&gt;

<hibernate-configuration>
    <session-factory>
        <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="connection.url">jdbc:mysql://localhost:3306/hibernate?autoReconnect=true</property>
        <property name="connection.username">hibernate</property>
        <property name="connection.password">hibernate</property>
        <property name="connection.pool_size">1</property>
        <property name="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property>
        <property name="show_sql">true</property>
        <property name="generate_statistics">true</property>
        <property name="query.factory_class">org.hibernate.hql.classic.ClassicQueryTranslatorFactory</property>
        <property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>
        <property name="cache.use_minimal_puts">false</property>
        <property name="cache.use_query_cache">false</property>
        <property name="order_updates">false</property>
        <property name="hbm2ddl.auto">create-drop</property>
        <property name="current_session_context_class">thread</property>

        <mapping resource="hibernate/policy/persistence/hibernate/Person.hbm.xml"/>

    </session-factory>
</hibernate-configuration>
duffymo
Ok I didn't provide my whole hibernate.cfg.xml. Do I always need hbm2ddl.auto property?
ZeKoU
No, not if you don't need it. I usually let it create the schema from objects and then comment it out.
duffymo