Hibernate 如何使用jpaTemplate创建NativeQuery

Hibernate 如何使用jpaTemplate创建NativeQuery,hibernate,spring,jpa,Hibernate,Spring,Jpa,如何使用jpatemplate使用createNativeQuery,因为jpatemplate.getEntityManager()返回null: public class GenericDAO<T, PK extends Serializable> { @Autowired public void setEntityManagerFactory(EntityManagerFactory emf) { this.jpaTemplate = new J

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

public class GenericDAO<T, PK extends Serializable> {
    @Autowired
    public void setEntityManagerFactory(EntityManagerFactory emf) {
        this.jpaTemplate = new JpaTemplate(emf);    
    }
}
公共类GenericDAO{
@自动连线
public void setEntityManagerFactory(EntityManagerFactory emf){
this.jpaTemplate=新的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) ;
    }
  }
公共类GenericDAO{
@自动连线
public void setEntityManagerFactory(EntityManagerFactory emf){
this.jpaTemplate=新的jpaTemplate(emf);
}
@持久上下文
公共无效设置EntityManager(EntityManager EntityManager){
this.entityManager=entityManager;
}
公共作废保存(obj){
this.jpaTemplate.presist(objectobj)
}
公共列表createNativeQuery(字符串查询){
entityManager.createNativeQuery(查询);
}
}

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

return jpaTemplate.execute(new JpaCalback<List<?>>() {
    @Override
    public List<?> doInJpa(EntityManager em) {
        // your code here.
    }
});
返回jpaTemplate.execute(新的JpaCalback doInJpa(EntityManager em){
//你的代码在这里。
}
});

请注意,此类已被弃用。

是否有新的JPATemplate替代api直接使用本机JPA api(EntityManager方法)。