Je reçois l'erreur Impossible de résoudre l'erreur de constructeur dans une interface et une classe qui étend BaseRepository. J'ai renvoyé le code à l'endroit où je remplace seulement les méthodes de la classe BaseRepository et ne peux toujours pas déterminer la cause.Impossible de résoudre le constructeur correspondant - redéfinissant BaseRepository Classe
Habituellement, il est causé par quelque chose comme deux méthodes ayant le même nom et le printemps en choisissant le mauvais, mais je ne vois pas cela se produire. Les méthodes de UserPasswordResetToken ont été générées par l'IDE Eclipse. J'ai sélectionné toutes les classes à implémenter dans la boîte de dialogue Clic droit-> source-> Remplacer/implémenter les méthodes.
Les solutions que j'ai vues en ligne sont spécifiques à la définition de la valeur constructeur-arg des méthodes, mais je n'utilise pas de configuration xml ou java pour la classe UserPasswordResetToken. Je ne sais pas où déclarer les valeurs de constructeur-arg si je fais une configuration de bean pour cela. Je pourrais simplement les coder tous, mais cela ne m'aide pas à voir la cause du problème et à en apprendre davantage. Je ne vois pas non plus où j'ai deux méthodes avec le même nom pour confondre Spring.
Je suis de ceux qui veulent non seulement la réponse mais aussi un moyen d'éviter cela dans le futur. Toute suggestion le long de cette ligne serait utile. Un message d'erreur révisé indiquant quelle méthode est à l'origine du problème serait également une amélioration. Je suppose que j'ai une suggestion pour les gens d'Oracle.
Trace de la pile:
Caused by: java.lang.RuntimeException:
org.springframework.beans.factory.UnsatisfiedDependencyExcep
tion: Error creating bean with name 'persistenceJPAConfig':
Unsatisfied dependency expressed through field 'env'; nested
exception is
org.springframework.beans.factory.BeanCreationException:
Error creating bean with name
'IUserVerificationTokenRepository': Could not resolve
matching constructor (hint: specify index/type/name
arguments for simple parameters to avoid type ambiguities)
at
io.undertow.servlet.core.DeploymentManagerImpl.deploy(Deploy
mentManagerImpl.java:236)
at
org.wildfly.extension.undertow.deployment.UndertowDeployment
Service.startContext(UndertowDeploymentService.java:100)
at
org.wildfly.extension.undertow.deployment.UndertowDeployment
Service$1.run(UndertowDeploymentService.java:82)
... 6 more
classe PersistenceJPAConfiguration:
@Configuration
@EnableTransactionManagement
@PropertySource({ "classpath:persistence-mysql.properties" })
@ComponentScan(basePackages = {"com.aexample.persistence"},
includeFilters = @Filter(type = FilterType.REGEX, pattern="com.aexample.persistence.*"))
@EnableJpaRepositories(basePackages = "com.aexample.persistence.repositories")
//@EnableJpaAuditing(dateTimeProviderRef = "dateTimeProvider")
public class PersistenceJPAConfig {
@Autowired
private Environment env;
public PersistenceJPAConfig() {
super();
}
// beans
@Bean
public LocalContainerEntityManagerFactoryBean entityManagerFactory() {
final LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean();
em.setDataSource(dataSource());
em.setPackagesToScan(new String[] { "com.aexample.persistence.model" });
final HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
em.setJpaVendorAdapter(vendorAdapter);
em.setJpaProperties(additionalProperties());
return em;
}
@Bean(name="dataSource")
public DataSource dataSource() {
final DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName(Preconditions.checkNotNull(env.getProperty("jdbc.driverClassName")));
dataSource.setUrl(Preconditions.checkNotNull(env.getProperty("jdbc.url")));
dataSource.setUsername(Preconditions.checkNotNull(env.getProperty("jdbc.user")));
dataSource.setPassword(Preconditions.checkNotNull(env.getProperty("jdbc.pass")));
return dataSource;
}
@Bean
public PlatformTransactionManager transactionManager(final EntityManagerFactory emf) {
final JpaTransactionManager transactionManager = new JpaTransactionManager();
transactionManager.setEntityManagerFactory(emf);
return transactionManager;
}
@Bean
public PersistenceExceptionTranslationPostProcessor exceptionTranslation() {
return new PersistenceExceptionTranslationPostProcessor();
}
@Bean
public BCryptPasswordEncoder passwordEncoder(){
return new BCryptPasswordEncoder();
}
@Bean
public SessionRegistry sessionRegistry(){
return new SessionRegistryImpl();
}
final Properties additionalProperties() {
final Properties hibernateProperties = new Properties();
hibernateProperties.setProperty("hibernate.hbm2ddl.auto", env.getProperty("hibernate.hbm2ddl.auto"));
hibernateProperties.setProperty("hibernate.dialect", env.getProperty("hibernate.dialect"));
// hibernateProperties.setProperty("hibernate.globally_quoted_identifiers", "true");
return hibernateProperties;
}
}
Interface IUserPasswordResetToken:
public interface IUserPasswordResetTokenRepository extends BaseRepository<UserPasswordResetToken, Long> {
void delete(UserPasswordResetToken token);
public List<UserPasswordResetToken> findAll();
public UserPasswordResetToken findOne(Long id);
public UserPasswordResetToken save(UserPasswordResetToken persisted);
UserPasswordResetToken findByToken(String token);
UserPasswordResetToken findByUser(User user);
Stream<UserPasswordResetToken> findAllByExpiryDateLessThan(Date now);
void deleteByExpiryDateLessThan(Date now);
@Modifying
@Query("delete from UserPasswordResetToken t where t.expiryDate <= ?1")
void deleteAllExpiredSince(Date now);
}
UserPasswordResetToken Classe:
public abstract class UserPasswordResetTokenRepositoryImpl implements IUserPasswordResetTokenRepository {
private IUserPasswordResetTokenRepository repository;
/**
* @param repository
*/
public UserPasswordResetTokenRepositoryImpl(IUserPasswordResetTokenRepository repository) {
super();
this.repository = repository;
}
@Override
public void delete(UserPasswordResetToken deleted) {
repository.delete(deleted);
}
@Override
public List<UserPasswordResetToken> findAll() {
List<UserPasswordResetToken> theTokens = repository.findAll();
return theTokens;
}
@Override
public UserPasswordResetToken findOne(Long id) {
UserPasswordResetToken theToken = repository.findOne(id);
return theToken;
}
@Override
public UserPasswordResetToken save(UserPasswordResetToken persisted) {
UserPasswordResetToken theToken = repository.save(persisted);
return theToken;
}
@Override
public UserPasswordResetToken findByToken(String token) {
UserPasswordResetToken theToken = repository.findByToken(token);
return theToken;
}
@Override
public Stream<UserPasswordResetToken> findAllByExpiryDateLessThan(Date now) {
Stream<UserPasswordResetToken> theTokenStream = repository.findAllByExpiryDateLessThan(now);
return theTokenStream;
}
@Override
public UserPasswordResetToken findByUser(User user) {
UserPasswordResetToken theToken = repository.findByUser(user);
return theToken;
}
@Override
public void deleteByExpiryDateLessThan(Date now) {
repository.deleteByExpiryDateLessThan(now);
}
@Override
public void deleteAllExpiredSince(Date now) {
repository.deleteAllExpiredSince(now);
}
}
BaseRepository Classe
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.repository.NoRepositoryBean;
import org.springframework.data.repository.Repository;
@NoRepositoryBean
public interface BaseRepository<T, ID extends Serializable> extends Repository<T, ID>{
void delete(T deleted);
List<T> findAll();
T findOne(ID id);
T save(T persisted);
}
Pouvez-vous me dire d'où vient la BaseRepository.class, ou est-ce votre implémentation? Si c'est votre implémentation, veuillez poster le code. –
Ah, bon point. Le code est publié. Il étend le springframework. classe data.repository. Alors oui, j'ai des interfaces qui étendent les interfaces. –