2009-11-01 12 views
12

私は、Hibernate注釈を使用して、私は次のエラーを取得していて春を結合しようとしている:ここで春+休止状態=不明実体

org.springframework.orm.hibernate3.HibernateSystemException : Unknown entity: entities.Bar; nested exception is org.hibernate.MappingException: Unknown entity: entities.Bar 

は私のセットアップ...

私のエンティティです。

package entities; 

@Entity  
public class Bar implements Serializable 
{ 
    ... 
} 

マイ豆:

package blah; 

@Repository 
@Service("fooService") 
@RemotingDestination(channels = { "my-amf" }) 
public class Foo 
{ 
    protected HibernateTemplate template; 

    @Autowired 
    public void setSessionFactory(SessionFactory sessionFactory) 
    { 
    template = new HibernateTemplate(sessionFactory); 
    } 

    @RemotingInclude 
    public void addBar(String name) throws DataAccessException 
    { 
    Bar bar = new Bar(); 
    bar.setName(name); 
    template.save(bar); 
    } 

}

私は春に注釈を有効にしています:私はBlazeDSに通じFlexアプリケーションからの私のFoo.addBarメソッドを呼び出すと

<context:annotation-config /> 
<context:component-scan base-package="blah" /> 

<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> 
    <property name="driverClassName" value="org.h2.Driver" /> 
    <property name="url" value="jdbc:h2:~/blahdb/blahdb" /> 
</bean> 

<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"> 
    <property name="dataSource" ref="dataSource" /> 
    <property name="annotatedClasses"> 
     <list> 
      <value>entities.Bar</value> 
     </list> 
    </property> 
    <property name="hibernateProperties"> 
     <props> 
      <prop key="hibernate.dialect">org.hibernate.dialect.H2Dialect</prop> 
      <prop key="hibernate.hbm2ddl.auto">create</prop> 
     </props> 
    </property> 
</bean> 

私はエラーを取得します。

私は本当に追加設定を避けたいと思っています。これはすべてうまくいくはずです。

私はSpring 3.0.0.RC1、Hibernate Annotations 3.4.0、Tomcat 6.0.20、Java 1.6.0_15を使用しています。

アイデア?ありがとう。

+0

マッピング例外のように見えるが、あなたがはっきり 'Bar'は、「私はどんなタイプミスをチェックしてから休止状態のjarファイルは、(互換性マトリックスとの)互換性があり、春3 –

+0

Iと互換性があるかどうかを確認だろう、マッピングされていmはHibernateでSpring 3.0.0.RC1を使用して成功しました:Core 3.3.2.GA、Annotations 3.4.0.GA.だから一緒に働くのは間違いない。 –

+1

James、プロジェクトの関連部分を電子メールで送ってほしいと思ったら、私は見てみて自分の作業プロジェクトと比較してみてうれしく思います。私の電子メールアドレスはconcat( 'willie'、 '。'、 'wheeler')です。Google電子メールサービス: –

答えて

31

Entityアノテーションにはorg.hibernate.annotations.Entityではなく、import @javax.persistence.Entityをお試しください。

+1

OMG!あなたは揺れる。それは完全にそれでした。私はそれをキャッチしていないため、非常識であるように感じます。私はそれが問題ではないと思ったので、私は上記のコードに輸入品を含めていなかったということさえも言いました。 –

+2

300評判ポイント! –

1

はあなたの春のアプリケーションコンテキストXMLへの適切な名前空間を追加したことを確認してください:私は考えることができる

<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xmlns:context="http://www.springframework.org/schema/context" 
     xsi:schemaLocation=" 
      http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd 
      http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd> 
+0

私はすでにそれらを持っています。しかし、ありがとう。 –

1

唯一のことは何とか自分のannotatedClassesの定義は、問題のエンティティが欠落しているということです。パッケージ名を含むannotatedClasses defを再確認できますか?

このエラーが起動時に発生していると思いますか?エラーメッセージの周りに文脈をもう少し含めることができますか?

2009-11-01 10:05:55.593::WARN: Nested in org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in ServletContext resource [/WEB-INF/applicationContext.xml]: Invo 
cation of init method failed; nested exception is org.hibernate.AnnotationException: @OneToOne or @ManyToOne on com.springinpractice.ch06.model.Message.forum references an unknown entity: com.springinpractice.ch06.model. 
Forum: 
org.hibernate.AnnotationException: @OneToOne or @ManyToOne on com.springinpractice.ch06.model.Message.forum references an unknown entity: com.springinpractice.ch06.model.Forum 
     at org.hibernate.cfg.ToOneFkSecondPass.doSecondPass(ToOneFkSecondPass.java:81) 
     at org.hibernate.cfg.AnnotationConfiguration.processEndOfQueue(AnnotationConfiguration.java:456) 

[省略]

EDIT:別の質問/アイデアたとえば、私はあなたが私のannotatedClasses定義からクラスのいずれかを除去することにより、報告されているものと同様のものを再現することができました。実行時クラスパス上に、適切な注釈JAR(JPAの場合はpersistence.jar、JARの場合はHibernate注釈)がありますか?

他の編集:もう1つ。どのJVMバージョンを実行していますか?

+0

これを手伝ってくれてありがとうウィリー。私はより多くのバージョン番号で質問を更新しました。 WEB-INF/libにHibernate Annotations JARがあります。 –

5

私は同じ問題が発生しましたし、私のために働いた何この

のための任意の良い答えを見つけられませんでしたが永続で私のエンティティクラスを宣言しました。xmlファイル

(両方のリソースの下で被試験):SessionFactoryのを構成するために使用さannotatedClassesプロパティは、パッケージ内の右のエンティティの方を向いていない場合

<persistence ...> 
    <persistence-unit ...> 

     <class>com.company.maenad.core.model.News</class> 
     <class>com.company.maenad.core.model.AdExtraInfo</class> 

    </persistence-unit> 
</persistence> 
2

上記の例外もoccours。

annotatedClassesの代わりにpackagesToScanプロパティを使用することも推奨されます。これは、Entitiesのパッケージ全体をスキャンするため、完全修飾されたクラス名を持つエンティティを明示的に記述するのを避けます。

<bean id="sessionFactory" 
class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"> 
<property name="dataSource" ref="dataSource"></property> 
<property name="packagesToScan" value="com.code.entity"></property> 
<property name="hibernateProperties"> 
<props> 
    <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop> 
    <prop key="hbm2ddl.auto">update</prop> 
    <prop key="hibernate.show_sql">true</prop> 
</props> 
</property> 

1

私は明示的にentitesのパッケージを書くことは安全であると思います。このエラーが発生し、EntityScanアノテーションを使用して解決しました。

@EntityScan(basePackages = "your.entities.pakage")