首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何将EntityManager自动导入我的存储库,而不总是为null?

如何将EntityManager自动导入我的存储库,而不总是为null?
EN

Stack Overflow用户
提问于 2022-03-23 12:44:40
回答 1查看 285关注 0票数 0

我有一个多模块的弹簧项目。在我的一个模块中,我有一个存储库,它在我的数据库中执行本机查询。为了达到这个目的,我使用了一个自动头发的EntityManager。

问题是,在我的存储库中,EntityManager始终是空的。我不确定是否应该在任何地方配置EntityManager,但我希望Spring能够将它注入到我的存储库中。

错误消息:

代码语言:javascript
运行
复制
java.lang.NullPointerException: Cannot invoke "javax.persistence.EntityManager.createNativeQuery(String)" because "this.entityManager" is null

我已经尝试过的是:

使用@PersistenceContext代替@Autowired

  • Adding @EnableJpaRepositories,@EntityScan,@ComponentScan到MainApplication类以强制

  • 扫描另一个模块中的类。

下面是我的项目树:(一些文件被省略了,因为它们可能不相关)

代码语言:javascript
运行
复制
MyApp/
├─ Application/
│  ├─ com.application/
│  │  ├─ MainApplication.java
├─ Module/
│  ├─ com.myModule/
│  │  ├─ service/
│  │  │  ├─ ProcedureService.java
│  │  ├─ repository/
│  │  │  ├─ IProcedureRepository.java
│  │  │  ├─ ProcedureRepository.java

MainApplication.java

代码语言:javascript
运行
复制
@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

代码语言:javascript
运行
复制
@Service
public class ProcedureService implements IProcedureService {

    @Autowired
    IProcedureRepository repository;

    @Override
    @Transactional
    public void executarQueryTeste() {
        repository.executarQueryComParametros(query here);
    }

ProcedureRepository.java

代码语言:javascript
运行
复制
@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?

EN

Stack Overflow用户

发布于 2022-03-23 14:08:41

在我的例子中,问题是存储库方法中的final关键字。删除它可以访问我的自动头发的EntityManager。

代码语言:javascript
运行
复制
@Repository
public class ProcedureRepository implements IProcedureRepository  {

    @Autowired
    EntityManager entityManager;

    @Override
    public void executarQueryComParametros(String query){
        var entityManagerQuery = entityManager.createNativeQuery(query);
        entityManagerQuery.executeUpdate();
    }
}
票数 0
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71587466

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档