我有以下服务类来使用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;
}
您已正确注释您的QueryService类,并且该包位于上下文中:scan basepackage? – Jens
添加你的弹簧配置文件 –
添加config –