春天无法找到名为entityManagerFactory的

问题描述:

我有一个使用Spring Web应用程序和冬眠JPA的支持,但是当我打开我的索引页此异常情况豆:春天无法找到名为entityManagerFactory的

http://pastebin.com/0X1GG9GQ

但我认为我的applicationContext .XML是配置好,但我反正张贴只是可以肯定的:

<?xml version="1.0" encoding="UTF-8"?> 
<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" 
    xmlns:tx="http://www.springframework.org/schema/tx" xmlns:p="http://www.springframework.org/schema/p" 
    xmlns:aop="http://www.springframework.org/schema/aop" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
      http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
      http://www.springframework.org/schema/context 
      http://www.springframework.org/schema/context/spring-context-3.0.xsd 
      http://www.springframework.org/schema/tx 
      http://www.springframework.org/schema/tx/spring-tx-3.0.xsd 
      http://www.springframework.org/schema/aop 
      http://www.springframework.org/schema/aop/spring-aop-3.0.xsd 
      "> 

    <!-- properties file for jdbc database access details/--> 
    <context:property-placeholder location="classpath:jdbc.properties" /> 

    <!-- enabling annotation driven configuration/--> 
    <context:annotation-config /> 

    <context:component-scan base-package="com.maegul" /> 

    <tx:annotation-driven transaction-manager="transactionManager" /> 
    <bean 
     class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor" /> 

    <bean id="dataSource" 
     class="org.springframework.jdbc.datasource.DriverManagerDataSource" 
     p:driverClassName="${jdbc.driverClassName}" p:url="${jdbc.url}" 
     p:username="${jdbc.username}" p:password="${jdbc.password}" /> 


    <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager" 
     p:entityManagerFactory-ref="entityManagerFactory" /> 

    <bean id="entityManagerFactory" 
     class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean" 
     p:dataSource-ref="dataSource" p:jpaVendorAdapter-ref="jpaAdapter"> 
     <property name="loadTimeWeaver"> 
      <bean 
       class="org.springframework.instrument.classloading.InstrumentationLoadTimeWeaver" /> 
     </property> 
     <property name="persistenceUnitName" value="maegul"></property> 
    </bean> 

    <bean id="jpaAdapter" 
     class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter" 
     p:database="${jpa.database}" p:showSql="${jpa.showSql}" /> 

</beans> 

我真的不知道什么是错的,我一直在不断变化的小事都无济于事,任何帮助将不胜赞赏。

编辑(龙栈在引擎收录,方便阅读...)

改变了一些东西在applicationContext.xml,现在我得到一个不同的堆栈跟踪:

INFO - Server      - jetty-7.5.0.v20110901 
INFO - tandardDescriptorProcessor - NO JSP Support for {}, did not find {} 
INFO -/      - Initializing Spring root WebApplicationContext 
INFO - ContextLoader    - Root WebApplicationContext: initialization started 
INFO - XmlWebApplicationContext - Refreshing Root WebApplicationContext: startup date [Sun Nov 06 13:22:53 COT 2011]; root of context hierarchy 
INFO - XmlBeanDefinitionReader - Loading XML bean definitions from ServletContext resource [/WEB-INF/ApplicationContext.xml] 
INFO - DefaultListableBeanFactory - Pre-instantiating singletons in org.s[email protected]40871449: defining beans [maegulApplication,itemService,userService,cartItemDao,mediaItemDao,mediaSourceDao,passwordDao,userDao,org.springframework.context.annotation.internalConfigurationAnnotationProcessor,org.springframework.context.annotation.internalAutowiredAnnotationProcessor,org.springframework.context.annotation.internalRequiredAnnotationProcessor,org.springframework.context.annotation.internalCommonAnnotationProcessor,org.springframework.context.annotation.internalPersistenceAnnotationProcessor]; root of factory hierarchy 
INFO - DefaultListableBeanFactory - Destroying singletons in org.s[email protected]40871449: defining beans [maegulApplication,itemService,userService,cartItemDao,mediaItemDao,mediaSourceDao,passwordDao,userDao,org.springframework.context.annotation.internalConfigurationAnnotationProcessor,org.springframework.context.annotation.internalAutowiredAnnotationProcessor,org.springframework.context.annotation.internalRequiredAnnotationProcessor,org.springframework.context.annotation.internalCommonAnnotationProcessor,org.springframework.context.annotation.internalPersistenceAnnotationProcessor]; root of factory hierarchy 
ERROR - ContextLoader    - Context initialization failed 
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'itemService': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private com.maegul.data.dao.impl.MediaItemDao com.maegul.service.implementation.ItemFindService.mediaItemDao; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'mediaItemDao': Injection of persistence dependencies failed; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No unique bean of type [javax.persistence.EntityManagerFactory] is defined: expected single bean but found 0 

休息栈这里:http://pastebin.com/u82n3C5n

我看到我所做的注释得到了认可,但看起来它仍然无法找到一个entityManagerFactory。有一件事我所看到的是,也许不是使用@PersistenceContext我应该用我的EntityManager领域@PersistenceUnit,但我不知道......

EDIT 2个

我所有的DAO实现看起来像这样:

import java.util.List; 

import javax.persistence.EntityManager; 
import javax.persistence.PersistenceContext; 
import javax.persistence.Query; 

import org.springframework.stereotype.Repository; 

import com.maegul.data.dao.AbstractDAO; 
import com.maegul.data.entities.MediaItem; 

@Repository(value = "mediaItemDao") 
public class MediaItemDaoImpl extends AbstractDAO<MediaItem> implements 
     MediaItemDao { 

    @PersistenceContext 
    private EntityManager em; 

    /* 
    * (non-Javadoc) 
    * 
    * @see com.maegul.data.dao.DAO#getEntityManager() 
    */ 
    public EntityManager getEntityManager() { 
     return em; 
    } 

    /* 
    * (non-Javadoc) 
    * 
    * @see com.maegul.data.dao.DAO#getClazz() 
    */ 
    public Class<MediaItem> getClazz() { 
     return MediaItem.class; 
    } 

    /* 
    * (non-Javadoc) 
    * 
    * @see com.maegul.data.dao.impl.MediaItemDao#findByName(java.lang.String) 
    */ 
    public MediaItem findByName(String name) { 
     Query q = getEntityManager().createQuery(
       "select u from " + getClazz() + " where u.name = :name"); 
     q.setParameter("name", name); 

     return (MediaItem) q.getSingleResult(); 
    } 

    /* 
    * (non-Javadoc) 
    * 
    * @see com.maegul.data.dao.impl.MediaItemDao#findByType(java.lang.String) 
    */ 
    @SuppressWarnings("unchecked") 
    public List<MediaItem> findByType(String type) { 
     Query q = getEntityManager().createQuery("select u from " + getClazz() + " where u.type = :type"); 
     q.setParameter("type", type); 

     return q.getResultList(); 
    } 
} 

EDIT 3

这是AbstractDao的类:http://pastebin.com/f2BQG9RE

这是DAO接口,这是由AbstractDao的实现:http://pastebin.com/h7dAHTTC

,这是接口MEdiaItemDao:

import java.util.List; 

import com.maegul.data.dao.DAO; 
import com.maegul.data.entities.MediaItem; 

public interface MediaItemDao extends DAO<MediaItem>{ 

    MediaItem findByName(String name); 

    List<MediaItem> findByType(String type); 
} 
+1

每件事看起来都很好。检查服务器是否正确并开始正确。检查applicationContext.xml是否真的在spring根应用程序上下文中加载。如果这没有帮助,请在OpenEntitzMangerInViewFilter类中设置断点。 – Ralph

+0

@Ralph感谢您的答复,applicationContext.xml文件被加载,只是看在新的堆栈我得到了,但它仍然无法加载'EntityManeager',所以我不知道该怎么办 –

+0

请发表一下' mediaItemDao',如果它通过xml进行连线,那么也是xml的根据。 – Ralph

它只需要一个项目干净,所以我没有和它固定它。