Hibernate 如何让spring注入我的EntityManager?

Hibernate 如何让spring注入我的EntityManager?,hibernate,spring,jpa,annotations,entitymanager,Hibernate,Spring,Jpa,Annotations,Entitymanager,我遵循指南,但是当DAO执行时,EntityManager是null 我尝试了在指南评论、各种论坛和这里(包括)找到的一些修复,但都没有成功。无论我似乎在做什么,EntityManager都将保持null 这里是相关的文件,包等改变,以保护无辜 spring-context.xml 类路径*:spring-*.properties 类路径*:${application.environment}.properties persistence.xml OrderDaoImpl package

我遵循指南,但是当DAO执行时,
EntityManager
null

我尝试了在指南评论、各种论坛和这里(包括)找到的一些修复,但都没有成功。无论我似乎在做什么,
EntityManager
都将保持
null

这里是相关的文件,包等改变,以保护无辜

spring-context.xml

类路径*:spring-*.properties
类路径*:${application.environment}.properties
persistence.xml

OrderDaoImpl
package com.group.service;
导入com.group.model.Order;
导入org.springframework.stereotype.Repository;
导入org.springframework.transaction.annotation.Transactional;
导入javax.persistence.EntityManager;
导入javax.persistence.PersistenceContext;
导入javax.persistence.Query;
导入java.util.List;
@存储库
@交易的
公共类OrderDaoImpl实现OrderDao{
私人实体管理者实体管理者;
@持久上下文
公共无效设置EntityManager(EntityManager EntityManager){
this.entityManager=entityManager;
}
@凌驾
公共秩序查找(整数id){
Order Order=entityManager.find(Order.class,id);
退货单;
}
@凌驾
公共列表findAll(){
Query Query=entityManager.createQuery(“从订单o中选择o”);
返回query.getResultList();
}
@凌驾
公共列表findBySymbol(字符串符号){
Query Query=entityManager.createQuery(“从o顺序中选择o,其中o.symbol=:symbol”);
返回query.setParameter(“symbol”,symbol).getResultList();
}
}

使用
org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor
您是否尝试将
unitName=“MyServer”
添加到您的@PersistenceContext注释中?

只是一个想法……您在web.xml中有这个条目吗

<servlet>
        <servlet-name>dispatcher</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:/META-INF/spring-context.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
</servlet>

调度员
org.springframework.web.servlet.DispatcherServlet
上下文配置位置
类路径:/META-INF/spring-context.xml
1.

这将确保您的spring上下文已加载,并且所有对象都由spring容器注入…如果您错过了这一点,请尝试一下…

您的
DAO如何在服务类中使用?给出使用DAO的类的代码
<persistence  xmlns="http://java.sun.com/xml/ns/persistence"  version="1.0">
    <persistence-unit name="MyServer" transaction-type="RESOURCE_LOCAL"/>
</persistence>
 package com.group.service;

 import com.group.model.Order;
 import org.springframework.stereotype.Repository;
 import org.springframework.transaction.annotation.Transactional;

 import javax.persistence.EntityManager;
 import javax.persistence.PersistenceContext;
 import javax.persistence.Query;
 import java.util.List;

 @Repository
 @Transactional
 public class OrderDaoImpl implements OrderDao {

     private EntityManager entityManager;

     @PersistenceContext
     public void setEntityManager(EntityManager entityManager) {
         this.entityManager = entityManager;
     }

     @Override
     public Order find(Integer id) {
         Order order = entityManager.find(Order.class, id);
         return order;
     }

     @Override
     public List<Order> findAll() {
         Query query = entityManager.createQuery("select o from Order o");
         return query.getResultList();
     }

     @Override
     public List<Order> findBySymbol(String symbol) {
         Query query = entityManager.createQuery("select o from Order o where o.symbol = :symbol");
         return query.setParameter("symbol", symbol).getResultList();
     }
 }
<servlet>
        <servlet-name>dispatcher</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:/META-INF/spring-context.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
</servlet>