如何在Spring Boot项目中访问服务内的Entity Manager?

时间:2018-07-13 13:47:40

标签: spring-boot spring-data

我已经搜索过很多次关于如何在春季启动中访问实体管理器的信息,并且按照帖子中的说明进行了操作,但是没有用。我想访问实体管理器,以便可以执行一些自定义查询操作。在这里,我在名为“ customrepository”的依赖包中定义了自定义接口:

public interface PostRepositoryCustom {
     void refresh(Post post);
}

然后,我在另一个名为“ customrepositoryimpl”的程序包中实现了此接口:

public class CustomPostRepositoryImpl implements PostRepositoryCustom {

  @PersistenceContext
  private EntityManager em;

  @Override
  public void refresh(Post post) {
    em.refresh(post);       
  }
}

最后,我定义了一个标准存储库接口,该接口扩展了'CrudRepository'和自定义存储库:

public interface PostRepository extends CrudRepository<Post,Long>,PostRepositoryCustom {}

我执行的所有步骤都经过谷歌搜索和官方文档,但是当我运行我的应用程序时,我得到了:

 Error creating bean with name 'postRepository': Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: Failed to create query for method public abstract void com.example.demo.customrepository.PostRepositoryCustom.refresh(com.example.demo.model.Post)! No property refresh found for type Post!

为什么?有人告诉我应该在哪里纠正我的错误吗?

1 个答案:

答案 0 :(得分:0)

Spring无法找到Bean,因此请尝试使用@Repository进行注释

@Repository
public class CustomPostRepositoryImpl implements PostRepositoryCustom {

  @PersistenceContext
  private EntityManager em;

  @Override
  public void refresh(Post post) {
    em.refresh(post);       
  }
}

@Repository
public interface PostRepository extends CrudRepository<Post,Long>{

}