2017-04-05 7 views
1

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クラス:

ON

BaseRepositoryクラス

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);  

} 
+0

BaseRepository.classがどこから来たのか教えていただけますか、それともあなたの実装ですか。あなたの実装の場合は、コードを投稿してください。 –

+0

ああ、良い点。コードが掲載されます。それはspringframeworkを拡張します。 data.repositoryクラス。だから、私はインターフェイスを拡張しているインターフェイスがあります。 –

答えて

0

HOLD ...私は自分自身を混乱させています。スタックトレースを読み直しました。私はIUserPasswordTokenRepositoryクラスで作業していましたが、スタックトレースは現在IUserVerificationTokenRepositoryClassと読みます。私はPasswordTokenクラスを修正し、気づかなかった!

以前は、削除する方法が2つありました.1つは文字列と1つのトークンパラメータです。私はストリング1を削除し、すべてを再配置しました。私はクラス名がスタックトレースで変更されているのに気付かず、同様に名前が付けられています。結局のところ私はその問題を見ました。

ありがとうございます!

関連する問題