Сгенерированные в спящем режиме POJO - PullRequest
1 голос
/ 24 ноября 2010

Я довольно новичок в hibernate, но я использовал Netbeans и инструмент обратного инжиниринга hibernate для генерации POJO из существующей схемы. Все POJO для каждой таблицы создаются просто отлично, за исключением таблиц соединения, которые, как я полагаю, должны быть именно такими, как я вижу, создаются ассоциации в файлах отображения. Но проблема возникает, когда я пытаюсь выполнить запрос HBL, я получаю исключение, что одна из моих таблиц соединения не сопоставлена. Я знаю, что в файле конфигурации есть запись сопоставления, единственное, о чем я могу думать, это о том, что моя модель данных неверна. У меня довольно большая модель ER, но таблицы проблем:

У меня есть таблицы User, Student, Major и StudentMajor. Ниже приведены мои заявления о создании

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);

Вот мой конфигурационный файл hibernate

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

и я использую инструмент генерирования гибринов NetJans POJO. Но когда я запускаю запросы, я получаю следующее исключение:

org.hibernate.MappingException: An ассоциация из таблицы студент-майор относится к не нанесенному на карту учебный класс: 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)

Есть ли вероятность, что эта ошибка вызвана тем, как я смоделировал свои таблицы? Любая помощь будет оценена.

Как и предполагалось, я включаю содержимое файлов hbm.xml для студентов и мажоров.

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>

Ответы [ 2 ]

0 голосов
/ 30 апреля 2012

Класс Student, к которому обращается ваше исключение, получен из:

com.portfolio.hibernate.mappings.Student

Ваш Student.hbm.xml содержит ученика в пакете:

com.jopos.Student

Разрешите ссылкувопрос.Убедитесь, что com.jopos.Major ссылается на com.jopos.Student при импорте.А также убедитесь, что таблица studentmajor и ее отображение существуют.

0 голосов
/ 30 апреля 2012

У нас была похожая проблема. Это было решено, когда мы изменили наши таблицы MySql с MyISAM на InnoDB.

Надеюсь, это поможет

Максим

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...