我有一个多模块的弹簧项目。在我的一个模块中,我有一个存储库,它在我的数据库中执行本机查询。为了达到这个目的,我使用了一个自动头发的EntityManager。
问题是,在我的存储库中,EntityManager始终是空的。我不确定是否应该在任何地方配置EntityManager,但我希望Spring能够将它注入到我的存储库中。
错误消息:
java.lang.NullPointerException: Cannot invoke "javax.persistence.EntityManager.createNativeQuery(String)" because "this.entityManager" is null
我已经尝试过的是:
使用@PersistenceContext代替@Autowired
下面是我的项目树:(一些文件被省略了,因为它们可能不相关)
MyApp/
├─ Application/
│ ├─ com.application/
│ │ ├─ MainApplication.java
├─ Module/
│ ├─ com.myModule/
│ │ ├─ service/
│ │ │ ├─ ProcedureService.java
│ │ ├─ repository/
│ │ │ ├─ IProcedureRepository.java
│ │ │ ├─ ProcedureRepository.java
MainApplication.java
@SpringBootApplication(
scanBasePackages = {
"com.myModule", "com.Application"
})
@EnableJpaRepositories(basePackages = { "com.myModule" })
@EntityScan(basePackages = { "com.myModule" })
@ComponentScan(basePackages = { "com.myModule" })
public class MainApplication {
public static void main(String[] args) {
SpringApplication.run(MainApplication.class, args);
}
}
ProcedureService.java
@Service
public class ProcedureService implements IProcedureService {
@Autowired
IProcedureRepository repository;
@Override
@Transactional
public void executarQueryTeste() {
repository.executarQueryComParametros(query here);
}
ProcedureRepository.java
@Repository
public class ProcedureRepository implements IProcedureRepository {
@Autowired
EntityManager entityManager;
@SafeVarargs
@Override
public final void executarQueryComParametros(String query){
var entityManagerQuery = entityManager.createNativeQuery(query);
entityManagerQuery.executeUpdate();
}
}
我应该怎么做才能访问我的EntityManager?
发布于 2022-03-23 14:08:41
在我的例子中,问题是存储库方法中的final
关键字。删除它可以访问我的自动头发的EntityManager。
@Repository
public class ProcedureRepository implements IProcedureRepository {
@Autowired
EntityManager entityManager;
@Override
public void executarQueryComParametros(String query){
var entityManagerQuery = entityManager.createNativeQuery(query);
entityManagerQuery.executeUpdate();
}
}
https://stackoverflow.com/questions/71587466
复制相似问题