Java Spring 3.2/Hibernate4.1.9:针对未映射类错误使用@OneToMany或@ManyToMany

Java Spring 3.2/Hibernate4.1.9:针对未映射类错误使用@OneToMany或@ManyToMany,java,spring,hibernate,Java,Spring,Hibernate,我现在正为一小段代码而疯狂。 我正在基于SpringMVC3.2创建一个SimpelREST服务,并在SpringORM和hibernate4.1.9中使用JPA持久层 我面临一个关于未映射类的奇怪bug。这是我建立关系之前的第一个完美的实体 User.java Servlet配置 有人知道问题出在哪里吗。我对这项技术没有太多的经验,我也不确定这篇文章中提供的信息是否足够 谢谢你的帮助 编辑: 这是我的hibernate.cfg.xml <!DOCTYPE hibernate-config

我现在正为一小段代码而疯狂。 我正在基于SpringMVC3.2创建一个SimpelREST服务,并在SpringORM和hibernate4.1.9中使用JPA持久层

我面临一个关于未映射类的奇怪bug。这是我建立关系之前的第一个完美的实体

User.java

Servlet配置

有人知道问题出在哪里吗。我对这项技术没有太多的经验,我也不确定这篇文章中提供的信息是否足够

谢谢你的帮助

编辑:

这是我的hibernate.cfg.xml

<!DOCTYPE hibernate-configuration PUBLIC
    "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
    "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
  <session-factory>
    <mapping package="org.mypackage.myapp.model"/>
    <mapping class="org.mypackage.myapp.model.User"/>
    <mapping class="org.mypackage.myapp.model.FileInfo"/>
    <mapping class="org.mypackage.myapp.model.Group"/>
    <mapping class="org.mypackage.myapp.model.FileInfoGroup"/>
  </session-factory>
</hibernate-configuration>
奥利314

好的, 我终于找到了应用程序在部署过程中产生错误的原因

我可能在配置过程中出错。我正在配置一个SpringServlet文件,但在我的spring配置文件夹中没有另一个名为root-context.xml的配置文件。它是在我的项目配置期间由STS自动生成的,可能是由于我的错误操作,这是服务器用于部署应用程序的文件。在此文件中,我的会话工厂bean没有正确配置。所以,在修复错误后,一切都会完美地工作


注意:我不确定是否有必要将hibernate.cfg.xml与spring一起使用,因为一切都可以在根spring配置文件中完成。在我看来,只有当一个项目多次定义一个会话工厂时,才有必要这样做。根据干式模式hibernate.cfg,xml在这种情况下是相关的。有人能告诉我我是否错了吗?

FileInfo中使用的实体注释的完全限定名是什么?根据您的配置,hibernate.cfg.xml是必需的,另一种方法是将所有hibernate配置直接移动到HibernateProperties OK。非常感谢您的评论。非常有助于了解流程工作流!
@Entity
@Table(name="file_info")
public class FileInfo {
//[...]
@ManyToOne
@JoinColumn(name = "owner_id")
private User owner;
//[...]
}
<?xml  version="1.0" encoding="UTF-8"?>
<!--[...]-->
<context:component-scan base-package="org.mypackage.myapp" />
<!--[...]-->
<bean id="sessionFactory"
   class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
   <property name="dataSource" ref="dataSource" />
   <property name="configLocation">
      <value>classpath:hibernate.cfg.xml</value>
   </property>
   <property name="packagesToScan" value="org.mypackage.myapp.model" />
   <property name="configurationClass">
      <value>org.hibernate.cfg.AnnotationConfiguration</value>
   </property>
   <property name="hibernateProperties">
      <props>
         <prop key="hibernate.dialect">${jdbc.dialect}</prop>
         <prop key="hibernate.show_sql">true</prop>
      </props>
   </property>
</bean>
<!--[...]-->
<tx:annotation-driven />
<bean id="transactionManager"
   class="org.springframework.orm.hibernate4.HibernateTransactionManager">
   <property name="sessionFactory" ref="sessionFactory" />
</bean>
<!--[...]-->
Caused by: org.hibernate.AnnotationException: Use of @OneToMany or @ManyToMany targeting an unmapped class: org.mypackage.myapp.model.User.fileInfos[org.mypackage.myapp.model.FileInfo]
    at org.hibernate.cfg.annotations.CollectionBinder.bindManyToManySecondPass(CollectionBinder.java:1057)
    at org.hibernate.cfg.annotations.CollectionBinder.bindStarToManySecondPass(CollectionBinder.java:733)
    at org.hibernate.cfg.annotations.CollectionBinder$1.secondPass(CollectionBinder.java:668)
    at org.hibernate.cfg.CollectionSecondPass.doSecondPass(CollectionSecondPass.java:66)
    at org.hibernate.cfg.Configuration.originalSecondPassCompile(Configuration.java:1597)
    at org.hibernate.cfg.Configuration.secondPassCompile(Configuration.java:1355)
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1737)
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1788)
    at org.springframework.orm.hibernate4.LocalSessionFactoryBuilder.buildSessionFactory(LocalSessionFactoryBuilder.java:242)
    at org.springframework.orm.hibernate4.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:372)
    at org.springframework.orm.hibernate4.LocalSessionFactoryBean.afterPropertiesSet(LocalSessionFactoryBean.java:357)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1545)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1483)
<!DOCTYPE hibernate-configuration PUBLIC
    "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
    "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
  <session-factory>
    <mapping package="org.mypackage.myapp.model"/>
    <mapping class="org.mypackage.myapp.model.User"/>
    <mapping class="org.mypackage.myapp.model.FileInfo"/>
    <mapping class="org.mypackage.myapp.model.Group"/>
    <mapping class="org.mypackage.myapp.model.FileInfoGroup"/>
  </session-factory>
</hibernate-configuration>