我试图使用注解将spring与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);
}
}
我将在 Spring 启用注解:
<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>
当我通过blazeds从flex应用程序调用foo.addbar方法时,我得到了这个错误。
我真的想避免额外的配置,似乎这一切都应该工作。
我使用的是Spring3.0.0.rc1、HibernateAnnotations3.4.0、Tomcat6.0.20和Java1.6.0。
有什么想法吗?谢谢。
6条答案
按热度按时间hlswsv351#
我唯一能想到的是,你的annotatedClass定义不知怎么地缺少了这个实体。你能仔细检查一下你的annotatedclasses def,包括包名吗?
我认为这个错误是在启动时出现的,对吗?你能在错误信息周围多加一点上下文吗?例如,通过从AnnotatedClass定义中删除其中一个类,我可以复制与您报告的内容类似的内容:
[剪]
编辑:另一个问题/想法。在运行时类路径上有合适的注解jar(persistence.jar for jpa或hibernate注解jar)吗?
另一个编辑:再来一个。您正在运行哪个jvm版本?
igsr9ssn2#
确保已将正确的命名空间添加到spring应用程序上下文xml中:
cxfofazt3#
我认为明确地写实体包是安全的。我得到了这个错误,并解决了使用entityscan注解。
mbskvtky4#
尝试使用
import @javax.persistence.Entity
而不是org.hibernate.annotations.Entity
为了你的Entity
注解。t2a7ltrp5#
如果用于配置sessionfactory的annotatedClass属性没有指向包中正确的实体,则上述异常也会发生。
还建议使用属性packagestoscan而不是annotatedClass,因为它扫描整个包中的实体,从而避免显式提到具有完全限定类名的实体。
ajsxfq5m6#
我也遇到过同样的问题,但没有找到任何好的答案
对我起作用的是在persistence.xml文件中声明我的实体类
(资源和测试中):