2010-11-24 20 views
1

Je suis un débutant avec Hibernate, mais j'ai utilisé Netbeans et Hibernate outil de rétro-ingénierie pour générer des POJO à partir d'un schéma existant. Tous les POJOs pour chaque table sont bien créés à l'exception des tables de jointure qui, je crois, sont supposées être de cette façon car je peux voir que les associations sont créées dans les fichiers de mapping. Mais le problème survient lorsque je tente d'exécuter une requête HBL. J'obtiens une exception: l'une de mes tables de jointure n'est pas mappée. Je sais qu'il y a une entrée de mappage dans le fichier de configuration, la seule chose à laquelle je pourrais penser est que mon modèle de données est incorrect. J'ai un assez grand modèle d'ER mais les tables de problème sontHibernate généré POJOs

J'ai des tables d'utilisateur, d'étudiant, de commandant et de StudentMajor. Voici mes déclarations créer

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`) 
    REFERENCES `Portfolio`.`Major` (`majorCode`) 
    ON DELETE NO ACTION 
    ON UPDATE NO ACTION); 

Voici mon fichier de configuration de mise en veille prolongée

<?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> 

et je me sers Netbeans mise en veille prolongée POJO outil genereation. Mais quand je lance les requêtes que je reçois l'exception ci-dessous:

org.hibernate.MappingException: Une association de la table studentmajor fait référence à une classe unmapped: com.portfolio.hibernate.mappings.Student à org.hibernate.cfg.Configuration.secondPassCompileForeignKeys (Configuration.java:1252) à org.hibernate.cfg.Configuration.secondPassCompile (Configuration.java:1170) à org.hibernate.cfg.AnnotationConfiguration.secondPassCompile (AnnotationConfiguration.java:324) à org.hibernate.cfg.Configuration.buildSessionFactory (Configuration.java:1286) à org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory (AnnotationConfiguration.java:859)

Est-il possible que cette erreur causé par la façon dont j'ai modélisé mes tables? Toute aide serait appréciée.

Comme suggéré, j'inclus le contenu des fichiers hbm.xml pour Student et Major.

étudiant :::

<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> 
+0

Le partage du contenu de vos fichiers 'hbm' est également important. –

+0

Prier, où serait l'entrée de mappage pour StudentMajor? – crnlx

+0

Sujith, je sais qu'un POJO pour StudentMajor n'a pas été généré parce que c'est une table de jointure. Suis-je censé avoir une entrée de cartographie pour cela? – mtanzania

Répondre

0

Nous avons eu le même problème. Il a été résolu lorsque nous avons changé nos tables MySql de MyISAM à InnoDB.

J'espère que cela aide

Maxim

0

La classe Student votre exception est été référait à est extrait de:

com.portfolio.hibernate.mappings.Student 

Votre Student.hbm.xml détient des étudiants dans le package:

com.jopos.Student 

Résolvez la référence problème.Assurez-vous que com.jopos.Major fait référence à com.jopos.Student dans son importation. Et assurez-vous également que la table studentmajor et sa cartographie existent.