当前位置: 首页 > 面试题库 >

我的自定义存储库实现中的CrudRepository

壤驷华辉
2023-03-14
问题内容

我试图获取对自定义实现()中UserRepository扩展的存储库接口()的引用,以便获得对Spring
JPA提供的所有方法的访问。CrudRepository``UserRepositoryExtensionImpl

Crud扩展名:

@Repository
public interface UserRepository extends CrudRepository<User, String>, UserRepositoryExtension<RosterUser> {
    ...any custom spring JPA methods...
}

扩展接口:

@Repository
public interface UserRepositoryExtension <T> {
   public T put(T entity);
}

定制实施:

public class UserRepositoryExtensionImpl implements UserRepositoryExtension<User> {

    UserRepository userRepository;

    @Autowired
    public UserRepositoryExtensionImpl(UserRepository userRepository) {
        this.userRepository = userRepository;
    }

    @Override
    public User put(User user) {
        System.out.println(user + "was put");
        // ...put logic here
        return null;
    }...
}

但是,UserRepository由于存在循环依赖关系(鉴于UserRepository扩展了my所实现的接口UserRepositoryImpl),因此我无法注入。我收到以下错误:

org.springframework.beans.factory.BeanCurrentlyInCreationException: Error creating bean with name '    userRepositoryImpl': Requested bean is currently in creation: Is there an unresolvable circular     reference?

一种可能的,但达不到理想的解决办法是注入和EntityManagerUserRepositoryImp,但在这种情况下,我没有获得任何所提供的春天JPA的方法CrudRepository,或任何其他方法,我可能在UserRepository创造。

关于如何解决这个问题的任何建议?

任何帮助将不胜感激。

编辑:正如@shelley的答案中所述,我能够通过进行3个更改来解决此问题:

  • @Repository从中删除UserRepositoryExtensionImpl
  • 重命名UserRepositoryExtensionImplUserRepositoryImpl。显然,这使Spring意识到了实现的存在。见spring文件
  • 删除我的构造函数并将其@Autowired移到该userRepository字段

成功!


问题答案:

为了使它起作用,需要更改一些小事项:

  • @Repository从自定义存储库界面(UserRepositoryExtension)中删除注释。

  • 自定义存储库实现实际上应命名为“ <StandardRepository>Impl”,而不是“ <CustomRepository>Impl”。在您的代码示例中,应使用UserRepositoryImpl而不是UserRepositoryExtensionImpl



 类似资料:
  • 这类似于在无法使用两个带有Spring Boot/Spring数据Neo4j的Neo4j实例中讨论的内容,但我没有两个数据库。我从git repo下载了spring data neo4j示例java应用程序,希望执行动态查询,而不是通过存储库接口执行静态查询。 我面临一个空事务管理器的问题。 这是我的界面: 以下是我的自定义回购建议: 以下是我的配置: 因为我只有一个TransactionMana

  • 在我的项目中有几个实体具有相同的属性(对于示例'name'),所以,有可能创建一个存储库,其中使用自定义的select(实体)?因此,我从JpaRepository扩展了我的存储库,我扩展了MyCustomJpaRepository,MyCustomJpaRepository也扩展了JpaRepository,使其能够从JpaRepository授予基本功能? TKS

  • 项目配置为使用多个MongoTemplate Mongo Ref传递为 问题:我需要访问MongoTemplate,它是类似的标准存储库。 例如,如果正在将接口扩展为 MyRepoCustomImpl 问题:相反,难道没有任何方法可以让要使用的MongoTemplate根据它扩展到的Repo自动注入或解析吗?

  • 我使用的是Spring数据JPA1.10.11。释放 我有一个基础存储库,所有其他存储库都会扩展它。这部分有效。 我还想为一些要扩展的存储库声明一个自定义接口。所以我声明了一个接口和一个“Impl”类: 然后,我创建一个现有的工作存储库来扩展这个新接口: 注意:此存储库在扩展TestRepository之前工作,但是在如上扩展之后,应用程序上下文将无法以错误开始: 配置如下所示: 我觉得我一直在遵

  • 假设我想有一个方法,它是获得超级主要客户,它有。 其中声明了方法。 然后我的公开存储库界面变成以下内容: 它扩展了和my。 我写的 bot不知道,在实现中写什么。如何接触客户?

  • 我发现对于减少样板非常有用,但它似乎给工作带来了麻烦。我现在试图用自定义的基类存储库扩展,而在启动时,Spring在正确实例化存储库方面遇到了问题。 我已经尝试了几个关于这个主题的变体,但是没有运气让事情成功地连线起来。我在Spring的问题跟踪器https://jira.spring.io/browse/datajpa-674上遇到了一个类似的问题,但没有关于修复的解释,只是对代码进行了重构,使

  • 我最终不得不在文件。定义通常非常繁琐: 注意上面gradle提供了一种定义常用maven存储库的好方法(即)。我想在插件或父gradle脚本中找到一种方法,在函数中或静态地定义存储库,然后在块中调用它:。 我缺乏groovy方面的知识,因此我不太了解解析groovy源代码所需的知识,我正在寻找一种很好的方法来实现这一点。我该怎么做? 我知道在父级gradle文件中,我可以使用或。我不想将这些mav

  • 如果你需要提供自定义文件存储 – 一个普遍的例子是在某个远程系统上储存文件 – 你可以通过定义一个自定义的储存类来实现。你需要遵循以下步骤: 1. 你的自定义储存类必须是django.core.files.storage.Storage的子类: from django.core.files.storage import Storage class MyStorage(Storage):