2011-10-18 49 views
0

私はSpringとHibernateを持つプロジェクトを持っていて、私のクラスではHibernate Annotations(@Entity、@MappedSuperClass)を使いたいと思います。HibernateとHibernateアノテーションを持つSpring = "Unknown Entity ..."

I次のhibernate-config.xmlがあります

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

<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> 
    <property name="driverClassName" value="org.h2.Driver" /> 
    <property name="url" value="jdbc:h2:mem:test_iep;USER=root;PASSWORD=root" /> 
    <property name="username" value="root" /> 
    <property name="password" value="root" /> 
</bean> 

<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"> 
    <property name="dataSource" ref="dataSource" /> 
    <property name="packagesToScan"> 
     <list> 
      <value>ch.foo.enterpriseportal</value> 
     </list> 
    </property> 

    <property name="hibernateProperties"> 
     <value> 
      hibernate.dialect=org.hibernate.dialect.H2Dialect 
      hibernate.hbm2ddl.auto=create 
     </value> 
    </property> 

    <property name="configurationClass"> 
     <value>org.hibernate.cfg.AnnotationConfiguration</value> 
    </property> 
</bean> 

私が存続したいマイ者クラス:

import org.hibernate.annotations.Entity; 

    @Entity 
    public class Person extends Party { 

private String firstName; 

public String getFirstName() { 
    return firstName; 
} 

public void setFirstName(String firstName) { 
    this.firstName = firstName; 
} 
} 

を私はPerson-を持続しようとした場合オブジェクト、私はこのスタックトレースを得る:

org.springframework.orm.hibernate3.HibernateSystemException: Unknown entity: ch.foo.enterpriseportal.domain.entities.party.Person; nested exception is org.hibernate.MappingException: Unknown entity: ch.foo.enterpriseportal.domain.entities.party.Person 
    at org.springframework.orm.hibernate3.SessionFactoryUtils.convertHibernateAccessException(SessionFactoryUtils.java:679) 
    at org.springframework.orm.hibernate3.HibernateAccessor.convertHibernateAccessException(HibernateAccessor.java:412) 
    at org.springframework.orm.hibernate3.HibernateTemplate.doExecute(HibernateTemplate.java:411) 
    at org.springframework.orm.hibernate3.HibernateTemplate.executeWithNativeSession(HibernateTemplate.java:374) 
    at org.springframework.orm.hibernate3.HibernateTemplate.persist(HibernateTemplate.java:793) 
    at ch.foo.enterpriseportal.domain.HibernateSetupIT.testHibernateSetup(HibernateSetupIT.java:34) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:597) 
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:45) 
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15) 
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:42) 
    at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20) 
    at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28) 
    at org.springframework.test.context.junit4.statements.RunBeforeTestMethodCallbacks.evaluate(RunBeforeTestMethodCallbacks.java:74) 
    at org.springframework.test.context.junit4.statements.RunAfterTestMethodCallbacks.evaluate(RunAfterTestMethodCallbacks.java:82) 
    at org.springframework.test.context.junit4.statements.SpringRepeat.evaluate(SpringRepeat.java:72) 
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:231) 
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:47) 
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:231) 
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60) 
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229) 
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:50) 
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222) 
    at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61) 
    at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70) 
    at org.junit.runners.ParentRunner.run(ParentRunner.java:300) 
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:174) 
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50) 
    at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197) 
Caused by: org.hibernate.MappingException: Unknown entity: ch.foo.enterpriseportal.domain.entities.party.Person 
    at org.hibernate.impl.SessionFactoryImpl.getEntityPersister(SessionFactoryImpl.java:693) 
    at org.hibernate.impl.SessionImpl.getEntityPersister(SessionImpl.java:1494) 
    at org.hibernate.engine.ForeignKeys.isTransient(ForeignKeys.java:202) 
    at org.hibernate.event.def.AbstractSaveEventListener.getEntityState(AbstractSaveEventListener.java:531) 
    at org.hibernate.event.def.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:102) 
    at org.hibernate.event.def.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:61) 
    at org.hibernate.impl.SessionImpl.firePersist(SessionImpl.java:808) 
    at org.hibernate.impl.SessionImpl.persist(SessionImpl.java:782) 
    at org.hibernate.impl.SessionImpl.persist(SessionImpl.java:786) 
    at org.springframework.orm.hibernate3.HibernateTemplate$21.doInHibernate(HibernateTemplate.java:796) 
    at org.springframework.orm.hibernate3.HibernateTemplate.doExecute(HibernateTemplate.java:406) 
    ... 32 more 

私は本当に問題がどこにあるのか本当に分かりませんが、構成上の問題かもしれません。

誰でも手伝いできますか?

答えて

3

org.hibernate.annotations.Entityの代わりにjavax.persistence.Entity注釈を使用してください。 org.hibernate.annotations.Entityは、既にjavax.persistence.Entityで注釈が付けられたエンティティにいくつかの休止状態特有の機能しか提供しません。

あなたが本当に休止@Entityアノテーションを使用したい場合は、それをより明確にするために、そのFQNを使うことはエンジンに依存する注釈です:

import javax.persistence.Entity; 

@Entity 
@org.hibernate.annotations.Entity(...) 
public class Person extends Party { 
    //... 
} 

これらの質問は、あなたに役に立つかもしれない:

関連する問題