开发者

Hibernate generated POJOs

I am fairly a newbie with hibernate but I have been using Netbeans and hibernate reverse engineering tool to generate POJOs from an existing schema. All the POJOs for each table are created just fine except for join tables which i believe it is supposed to be this way as I can see the associations are being created in the mapping files. But the problem comes when I attempt to execute HBL query I get an exception that one of my join tables is not mapped. I know there is a mapping entry in config file, the only thing I could think of is that my data model is incorrect. I have a fairly large ER model but the problem tables are

I have User, Student, Major and StudentMajor tables. Below are my create statements

CREATE  TABLE IF NOT EXISTS `Portfolio`.`User` (
  `919Number` INT(11) NOT NULL ,
  `loginId` VARCHAR(45) NOT NULL ,
  `password` VARCHAR(8) NOT NULL ,
  `userType` VARCHAR(10) NOT NULL ,
  `lastName` VARCHAR(45) NULL DEFAULT NULL ,
  `firstName` VARCHAR(45) NULL DEFAULT NULL ,
  PRIMARY KEY (`919Number`) );

CREATE  TABLE IF NOT EXISTS `Portfolio`.`Student` (
  `919Number` INT(11) NOT NULL ,
  `LEVL_CODE` VARCHAR(10) NOT NULL ,
  PRIMARY KEY (`919Number`) ,
  INDEX `919Number` (`919Number` ASC) ,
  CONSTRAINT `919Number`
    FOREIGN KEY (`919Number` )
    REFERENCES `Portfolio`.`User` (`919Number` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION);

CREATE  TABLE IF NOT EXISTS `Portfolio`.`Major` (
  `majorCode` VARCHAR(10) NOT NULL ,
  `majorDescription` VARCHAR(45) NULL DEFAULT NULL ,
  PRIMARY KEY (`majorCode`) );

CREATE  TABLE IF NOT EXISTS `Portfolio`.`StudentMajor` (
  `919Number` INT(11) NOT NULL ,
  `majorCode` VARCHAR(10) NOT NULL ,
  PRIMARY KEY (`919Number`, `majorCode`) ,
  INDEX `studentmajor_919Number` (`919Number` ASC) ,
  INDEX `studentmajor_majorCode` (`majorCode` ASC) ,
  CONSTRAINT `studentmajor_919Number`
    FOREIGN KEY (`919Number` )
    REFERENCES `Portfolio`.`Student` (`919Number` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION,
  CONSTRAINT `studentmajor_majorCode`
    FOREIGN KEY (`majorCode` )
    REFERENC开发者_StackOverflow中文版ES `Portfolio`.`Major` (`majorCode` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION);

Here is my hibernate config file

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
  <session-factory>
    <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
    <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
    <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/portfolio</property>
    <property name="hibernate.connection.username">root</property>
    <property name="hibernate.connection.password">admin</property>
    <property name="hibernate.show_sql">true</property>
    <property name="hibernate.current_session_context_class">jta</property>
    <property name="hibernate.query.factory_class">org.hibernate.hql.ast.ASTQueryTranslatorFactory</property>
    <mapping resource="com/portfolio/hibernate/mappings/User.hbm.xml"/>
    <mapping resource="com/portfolio/hibernate/mappings/Student.hbm.xml"/>
    <mapping resource="com/portfolio/hibernate/mappings/Major.hbm.xml"/>
  </session-factory>
</hibernate-configuration>

and I am using Netbeans hibernate POJO genereation tool. But when I run the queries I get the below exception:

org.hibernate.MappingException: An association from the table studentmajor refers to an unmapped class: com.portfolio.hibernate.mappings.Student at org.hibernate.cfg.Configuration.secondPassCompileForeignKeys(Configuration.java:1252) at org.hibernate.cfg.Configuration.secondPassCompile(Configuration.java:1170) at org.hibernate.cfg.AnnotationConfiguration.secondPassCompile(AnnotationConfiguration.java:324) at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1286) at org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:859)

Is there a possibility that this error is caused by the way I have modeled my tables? Any help will be appreciated.

As suggested I am including contents of the hbm.xml files for Student and Major.

Student:::

<hibernate-mapping>
    <class name="com.jopos.Student" table="student" catalog="portfolio">
        <id name="nineOneNumber" type="int">
            <column name="nineOneNumber" />
            <generator class="assigned" />
        </id>
        <many-to-one name="user" class="com.jopos.User" update="false" insert="false"  fetch="select">
            <column name="nineOneNumber" not-null="true" unique="true" />
        </many-to-one>
        <property name="levlCode" type="string">
           <column name="LEVL_CODE" length="10" not-null="true" />
    </property>
    <set name="faculties" inverse="false" table="advises">
        <key>
            <column name="studentnineOneNumber" not-null="true" />
        </key>
        <many-to-many entity-name="com.jopos.Faculty">
            <column name="facultynineOneNumber" not-null="true" />
        </many-to-many>
    </set>
    <set name="majors" inverse="false" table="studentmajor">
        <key>
            <column name="nineOneNumber" not-null="true" />
        </key>
        <many-to-many entity-name="com.jopos.Major">
            <column name="majorCode" length="10" not-null="true" />
        </many-to-many>
    </set>
    <set name="enrolls" inverse="true">
        <key>
            <column name="nineOneNumber" not-null="true" />
        </key>
        <one-to-many class="com.jopos.Enroll" />
    </set>
    </class>
    </hibernate-mapping>

Major:::

<hibernate-mapping>
   <class name="com.jopos.Major" table="major" catalog="portfolio">
       <id name="majorCode" type="string">
           <column name="majorCode" length="10" />
           <generator class="assigned" />
       </id>
       <property name="majorDescription" type="string">
           <column name="majorDescription" length="45" />
       </property>
       <set name="students" inverse="true" table="studentmajor">
          <key>
            <column name="majorCode" length="10" not-null="true" />
           </key>
           <many-to-many entity-name="com.jopos.Student">
              <column name="nineOneNumber" not-null="true" />
           </many-to-many>
       </set>
    </class>
   </hibernate-mapping>


We had similar problem. It was solved when we changed our MySql tables from MyISAM to InnoDB.

I hope it helps

Maxim


The Student class your exception is been refering to is fetched from:

com.portfolio.hibernate.mappings.Student

Your Student.hbm.xml holds Student in the package:

com.jopos.Student

Do resolve the reference issue. Make sure com.jopos.Major is refering to com.jopos.Student in its import. And also make sure table studentmajor and its mapping exist.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜