BaseRepositoryを拡張するインターフェイスとクラスで一致するコンストラクタエラーを解決できませんでした。私はBaseRepositoryクラスのメソッドをオーバーライドしているに過ぎず、原因を特定できないコードにロールバックしました。一致するコンストラクタを解決できませんでした - BaseRepositoryクラスをオーバーライドしました
通常、同じ名前のSpringと間違ったSpringの2つのメソッドが原因ですが、このようなことは起こりません。 UserPasswordResetTokenのメソッドは、Eclipse IDEによって生成されました。右クリック - >ソース - >メソッドの上書き/実装ダイアログで、実装するすべてのクラスを選択しました。
解決方法オンラインで見たことは、メソッドのconstructor-arg値を設定することですが、私はUserPasswordResetTokenクラスにxmlまたはjava設定を使用していません。 Beanの設定を行う場合、constructor-argの値をどこに宣言するかわかりません。私はそれらのすべてをコーディングできますが、それは問題の原因を見てそれについて学ぶのに役立ちません。私はまた、同じ名前の2つのメソッドがどこにあるのかわからないので、Springを混乱させます。
私は答えを求めているだけでなく、これを避ける方法もあります。その行に沿った提案は役に立ちます。どちらの方法が問題を引き起こしているかを示す改訂されたエラーメッセージも改善されます。 Oracleの人々のための提案があります。
スタックトレース:
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
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;
}
}
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クラス:
ONBaseRepositoryクラス
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);
}
BaseRepository.classがどこから来たのか教えていただけますか、それともあなたの実装ですか。あなたの実装の場合は、コードを投稿してください。 –
ああ、良い点。コードが掲載されます。それはspringframeworkを拡張します。 data.repositoryクラス。だから、私はインターフェイスを拡張しているインターフェイスがあります。 –