休眠生成POJOs

问题描述:

我是一个相当新手与休眠,但我一直在使用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

我们有类似的问题。当我们将MySql表从MyISAM更改为InnoDB时,它得到了解决。

我希望它能帮助

马克西姆

Student类的异常是指的是获取来自:

com.portfolio.hibernate.mappings.Student 

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

com.jopos.Student 

解决参考 问题。确保com.jopos.Major在其导入中指的是com.jopos.Student。并确保表studentmajor及其映射存在。