2015-08-08 81 views
0

我有以下服务类来使用EntityManager query()方法返回一个int。EntityManagerFactory返回空

public class QueryService { 
    @PersistenceUnit(unitName = "SpringHibernateJpaPersistenceProvider") 
    private EntityManagerFactory emf; 

    public int getCount(User user) { 
    EntityManager em = emf.createEntityManager(); 
    int count; 
    Query qry = em.createQuery(
      "select count(*) from User where managerId=? AND address=?"); 
    qry.setParameter(1, user.getManagerId()); 
    qry.setParameter(2, user.getAddress()); 
    try { 
     count = ((Long) qry.getSingleResult()).intValue(); 
    } catch (NoResultException nre) { 
     count = 0; 
    } 
    return count; 
} 

}

然而emf返回null,我的查询无法运行。我在@Controller方法上使用的方法与EntityManagerFactory完全相同,这种方法正常工作。也许我对EMF的工作原理还不够了解,有没有人有任何想法?

我的包结构

src 
    com.mysite.controllers 
    com.mysite.repositories 
    com.mysite.services 
     -QueryService.java 

更新:我使用Java配置为我的项目设置(无.XML) - 包括我的EMF配置

@Autowired 
    private Environment environment; 

    @Bean(name = "entityManagerFactory") 
    public LocalContainerEntityManagerFactoryBean entityManagerFactory() { 
     LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean(); 
     em.setDataSource(dataSource()); 
     em.setPackagesToScan(new String[] { "com.mysite" }); 
     JpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter(); 
     em.setJpaVendorAdapter(vendorAdapter); 
     em.setPersistenceProvider(vendorAdapter.getPersistenceProvider()); 
     em.setPersistenceUnitName("SpringHibernateJpaPersistenceProvider"); 
     em.setJpaProperties(additionalProperties()); 
     return em; 
    } 
+0

您已正确注释您的QueryService类,并且该包位于上下文中:scan basepackage? – Jens

+0

添加你的弹簧配置文件 –

+0

添加config –

回答

0

配置JPA提供(使用persistence.xml,hibernate.cfg.xml或弹簧配置或注释)和Spring。

如果你已经配置了JPA和Spring,你可以添加这些文件到你的问题,所以我们可以看到内容?

+0

包含我的实体管理器工厂配置 –