LoginUser.hbm.xml
User.hbm.xml解析的时候,先解析LoginUser再解析User。而此时User尚未解析,SchemaExport找不到User类,必然报错。

解决方案 »

  1.   

    如果你使用SchemaExport时用了--config=/hibernate.cfg.xml,那么你在该文件中把被引用的类的配置文件放前面就可以了。比如<mapping resource="User.hbm.xml"/>
    <mapping resource="LoginUser.hbm.xml"/>
      

  2.   

    我就是先解User.hbm.xml的,而且也正常通过了.但是到了LoginUser就不行了
      

  3.   

    你这里用的外键关联方式,User.hbm.xml是不是也需要指定一下,我没试过呀,不过你可以试一下呀
    :)
      

  4.   

    不知道你如何使用SchemaExport。java? SchemaExportTask? 自行编写代码?我在使用hibernate的ext-tools中的hbm2javaTask的时候,他就没有保存已经解析过的类,后来我把他源代码改了。不过我在用java SchemaExport就没问题。如果你是自己写java代码运行SchemaExport的话,你要注意classMappings变量,解析完一个类,要将此类保存到该变量中,可以自行研究一下SchemaExportTask.java。
      

  5.   

    用的是
    <target name="SchemaExport">
    <java classname="net.sf.hibernate.tool.hbm2ddl.SchemaExport" failonerror="true" >
    <classpath refid="SchemaExport.classpath" />
    <arg value="--${HIBERNATE_HOME}/bin/hibernate.properties" />
    <arg value="${src}/LoginUser.hbm.xml" />
    </java>
    </target>我也把User.class加了classpath中了呀
      

  6.   

    <!--hbm 2 ddl-->
      <target name="h">
        <java dir="classes" classname="net.sf.hibernate.tool.hbm2ddl.SchemaExport" fork="true" classpathref="p">
          <classpath><pathelement location="./classes"/></classpath>
          <arg value="--config=/hibernate.cfg.xml"/>
          <arg value="--output=../resource/db/form.sql"/>
          <!--arg value="-quiet"/>
          <arg value="--text"/>
          <arg value="--format"/>
          <arg value="--delimiter=;"/>
        </java>
      </target>
      

  7.   

    重要目录结构如下:WEB-INF<dir>
    |--build.xml
    |--classes<dir>
      |--hibernate.cfg.xml1.使用dir="classes"和fork="true"让该命令以classes目录为根目录运行。2.每个类使用自己的配置文件,放在各自的目录下。比如
    <mapping resource="po/test/TestSimple.hbm.xml"/>3.在hibernate.cfg.xml中注册这些文件。因此只要用--config=/hibernate.cfg.xml,不需要指定mapping_files参数,如你写的<arg value="${src}/LoginUser.hbm.xml" />
      

  8.   

    描述得不好,修改一下:2.每个类使用自己的配置文件,放在各自的目录下。比如classes/po/test/TestSimple.hbm.xml3.在hibernate.cfg.xml中注册这些文件。
    <mapping resource="po/test/TestSimple.hbm.xml"/>4.然后只需要--config=/hibernate.cfg.xml参数就可以了,因为要解析的xml文件,都已经注册在hibernate.cfg.xml里面。其他
    你的bin目录等同于我的classes目录,是.class的存放目录。
    hibernate.properties应该也可以注册每个类的配置文件。
      

  9.   

    感谢楼上的帮助,但是您给我介绍了一套好的方法,并没有告诉我错误的原因,以及为什么这么解决我的classpath
    <property name="build" value="/eclipse/workspace/myself/Web root/WEB-INF/classes"/>
    <property name="src" value="/eclipse/workspace/myself/Java source" />
    <property name="HIBERNATE_HOME" value="/tmp/tus/hibernate-2.1" />
    <property name="HIBERNATE.LIB" value="${HIBERNATE_HOME}/lib" />
    <property name="JDBC_DRIVER" value="${HIBERNATE.LIB}/mysql-connector-java-3.0.14-production-bin.jar" />
    <property name="PROPS" value="${HIBERNATE_HOME}/src" />
    <property name="project.dir" value="\eclipse\workspace\myself" /> <path id="SchemaExport.classpath">
    <pathelement path="${PROPS}" />
    <pathelement path="${HIBERNATE_HOME}/hibernate2.jar" />
    <pathelement path="${JDBC_DRIVER}" />
    <pathelement path="${HIBERNATE.LIB}/commons-logging-1.0.4.jar" />
    <pathelement path="${HIBERNATE.LIB}/commons-collections-2.1.1.jar" />
    <pathelement path="${HIBERNATE.LIB}/commons-lang-1.0.1.jar" />
    <pathelement path="${HIBERNATE.LIB}/cglib-2.0-rc2.jar" />
    <pathelement path="${HIBERNATE.LIB}/dom4j-1.4.jar" />
    <pathelement path="${HIBERNATE.LIB}/odmg-3.0.jar" />
    <pathelement path="${HIBERNATE.LIB}/xml-apis.jar" />
    <pathelement path="${HIBERNATE.LIB}/xerces-2.4.0.jar" />
    <pathelement path="${HIBERNATE.LIB}/xalan-2.4.0.jar" />
    <pathelement path="${build}" />
    </path>
      

  10.   

    错误原因前面说过:指定要解析的类文件的顺序。你看错误提示;
    net.sf.hibernate.MappingException: An association from the table loginuser refers to an unmapped class: com.my.test.User意思很明显,LoginUser关联User类。那么,User类必须在LoginUser之前解析。因此,在hibernate.cfg.xml中注册时,顺序如下:
    <mapping resource="User.hbm.xml"/>
    <mapping resource="LoginUser.hbm.xml"/>
    另外,像你这样导入jar会累死,建议用如下方法:
    ----------
      <path id="p">
        <pathelement location="${classpath}"/>
        <fileset dir="lib/">
          <include name="**/*.jar"/>
        </fileset>
      </path>
    ----------
    这样lib目录下的所有jar文件都导入了。你只要把工程所有需要用到的jar文件,都放入lib目录就可以。
      

  11.   

    <pathelement location="${classpath}"/>这个是系统的classpath环境变量,我的电脑中,只设定为.;
      

  12.   

    我的是在之解晰的
    <hibernate-configuration>    <session-factory>        <property name="connection.datasource">java:comp/env/jdbc/temp</property>
            <property name="show_sql">false</property>
            <property name="dialect">net.sf.hibernate.dialect.MySQLDialect</property>        <!-- Mapping files -->
            <mapping resource="User.hbm.xml"/>
            <mapping resource="LoginUser.hbm.xml"/>
        </session-factory></hibernate-configuration>
      

  13.   

    考,疯掉了,我讨厌hibernate [java] net.sf.hibernate.HibernateException: hibernate.cfg.xml not found