春季数据自动启动:使用@Autowired的两个bean候选者



我有一个使用弹簧数据从jparepository派生的用户repository:

@Transactional
@Repository( value = "userRepo")
@RepositoryDefinition( idClass = Integer.class , domainClass = info.frankmarx.model.User.class  )
public interface UserRepository extends JpaRepository< User , Integer > {
@Transactional(isolation = Isolation.READ_COMMITTED )
User findUserByUserName( String userName );
@Query( "select u from User u where u.isExpired = false and u.isDeleted = false and u.userName = ?1" )
User findActiveUserByName( String userName );
}

存储库是在我的appConfiguration-class中配置的:

@Configuration
@EnableJpaRepositories(value = "info.frankmarx.repository" , entityManagerFactoryRef = "entityManagerFactory" , transactionManagerRef = "transactionManager")
@EnableVaadin
public class AppConfiguration {
@WebListener( )
public static class MyContextLoaderListener extends ContextLoaderListener {
}
...
}

并且在ApplicationContext.xml中有组件 - 扫描等:

<context:component-scan base-package="info.frankmarx"/>
<context:annotation-config/>
<tx:annotation-driven transaction-manager="transactionManager"/>

但是,当我想将此存储库自动化到这样的服务中时:

@Autowired
private UserRepository userRepository;

我总是在Intellij中收到错误消息,即有两个bean候选者,我应该使用预选程序注释:

@Qualifier("userRepository")
@Autowired
private UserRepository userRepository;

如果我使用预选赛,则可以工作。

但是我不知道为什么没有@qualifier。

我真的不知道发生了什么。

任何帮助都非常感谢。

通常,当您定义了2个bean的相同类型时,出现错误there are TWO bean candidates,因此在运行时弹簧需要一种方法来识别您真正想在此属性中自动自动的bean,

为此,我们使用注释@Qualifier,在此BEAN的参数中,我们需要提供我们要自动自动的bean的名称。

希望这会有所帮助!

祝你好运!

不应注释UserRepository接口,在您的情况下,其他bean候选者将是 simplejparepository ,它与您的 userRerepository 相抵触。它应该足够适合您,仅扩展弹簧存储库接口,因为您是通过 @enablejparepositories启用存储库的在您的配置类上注释,因此您的存储库看起来像:

public interface UserRepository extends JpaRepository< User , Integer > {
User findUserByUserName( String userName );
@Query( "select u from User u where u.isExpired = false and u.isDeleted = false and u.userName = ?1" )
User findActiveUserByName( String userName );
}

另一方面,应在服务方法上使用 @transactional调用您的存储库的插入(entity)/save(ensave(entity)/find()/delete(entity)方法。

最新更新