如何使用jpaTemplate创建NameQuery

时间:2012-02-07 11:52:24

标签: hibernate spring jpa

如何使用jpatemplate使用createNativeQuery,因为jpatemplate.getEntityManager()返回null:

public class GenericDAO<T, PK extends Serializable> {
    @Autowired
    public void setEntityManagerFactory(EntityManagerFactory emf) {
        this.jpaTemplate = new JpaTemplate(emf);    
    }
}

或者我们可以同时使用entitymanager和jpaTemplate吗?像:

public class GenericDAO<T, PK extends Serializable> {
    @Autowired
    public void setEntityManagerFactory(EntityManagerFactory emf) {
        this.jpaTemplate = new JpaTemplate(emf);    
}
    @PersistenceContext
    public void setEntityManager(EntityManager entityManager) {
        this.entityManager = entityManager;
    }

    public void save(obj){
        this.jpaTemplate.presist(Object obj)
    }

    public List<?> createNativeQuery(String query){
        entityManager.createNativeQuery(query) ;
    }
  }

1 个答案:

答案 0 :(得分:2)

要访问实体管理器,您应该使用JpaTemplate的execute方法,并将代码放入回调中。 JpaTemplate为您提供EM。你没有从JpaTemplate获得它:

return jpaTemplate.execute(new JpaCalback<List<?>>() {
    @Override
    public List<?> doInJpa(EntityManager em) {
        // your code here.
    }
});

请注意,此类已弃用。