2010-11-24 153 views
1

我是一個相當新手與休眠,但我一直在使用Netbeans和休眠反向工程工具從現有的模式生成POJO。每個表的所有POJO都創建得很好,除了連接表,我相信它應該是這樣的,因爲我可以看到關聯正在映射文件中創建。但是,當我嘗試執行HBL查詢時出現問題,我得到一個異常,我的一個連接表未映射。我知道在配置文件中有一個映射條目,我唯一能想到的就是我的數據模型不正確。我有一個相當大的ER模型,但問題表是休眠生成POJOs

我有用戶,學生,主要和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); 

這裏是我的休眠配置文件

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

,我使用NetBeans冬眠POJO genereation工具。但是,當我運行查詢,我得到以下異常:

org.hibernate.MappingException:從表中 的 協會studentmajor是指未映射 類: 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) at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1286) 在 org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:859)

是否有可能該錯誤是由我建模我的表的方式造成的?任何幫助將不勝感激。

建議我包括學生和專業的hbm.xml文件的內容。

學生:::

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

主要:::

<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

分享你的`hbm`文件的內容也很重要。 – 2010-11-24 03:19:20

回答

0

我們有類似的問題。當我們將MySql表從MyISAM更改爲InnoDB時,它得到了解決。

我希望它能幫助

馬克西姆

0

Student類的異常是指的是獲取來自:

com.portfolio.hibernate.mappings.Student 

Student.hbm.xml持有學生在包:

com.jopos.Student 

解決參考 問題。確保com.jopos.Major在其導入中指的是com.jopos.Student。並確保表studentmajor及其映射存在。