1

私は今、小さなコードに夢中になっています。Spring MVC 3.2に基づいて、spring-ormとhibernate4.1.9でJPA永続化レイヤーを使用するsimpelrestサービスを作成しています。

マップされていないクラスに関する奇妙なバグに直面しています。これが私の最初のエンティティです(関係を設定する前に完全に機能します)

User.java

@Entity
@Table(name="user")
public class User {
//[...]
@OneToMany(mappedBy="owner", cascade=CascadeType.ALL, fetch=FetchType.EAGER)
private Set<FileInfo> fileInfos;
//[...]
}

FileInfo.java

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

誰もが問題がどこにあるか知っていますか?私はこのテクノロジーの経験があまりなく、この投稿で提供されている情報が十分かどうかはわかりません。

手伝ってくれてありがとう !

編集 :

これが私の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>

ollie314

4

1 に答える 1

0

OK、ついにアプリケーションがデプロイ中にバグを生成した理由がわかりました!。

構成プロセス中にエラーが発生した可能性があります。spring-servletファイルを構成していますが、root-context.xmlという名前の別の構成ファイルがSpring構成フォルダーにあることもわかりません。これは、プロジェクトの構成中にSTSによって自動生成されました(おそらく私からの不適切な操作が原因です)。これは、サーバーがアプリケーションを展開するために使用するファイルです。このファイルでは、セッションファクトリBeanが正しく構成されていませんでした。したがって、エラーを修正した後は、すべてが完全に機能します。

注:すべてがルートスプリング構成ファイルで作成される可能性があるため、スプリング付きのhibernate.cfg.xmlの必要性についてはよくわかりません。私の考えでは、プロジェクトがセッションファクトリを何度も定義する場合にのみ必要です。DRYパターンによると、hibernate.cfg、xmlはこの状況に関連しています。私が間違っているかどうか誰かに教えてもらえますか?

于 2013-02-03T20:28:48.830 に答える