I am trying to run the spring boot application but I got the below error:
Application run failed
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'returnReasonRepository' defined in class path resource [muscat/configuration/RepositoryConfiguration.class]: Unsatisfied dependency expressed through method 'returnReasonRepository' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'springReturnReasonRepository' defined in muscat.repository.SpringReturnReasonRepository defined in @EnableJpaRepositories declared on ServiceApplication: Invocation of init method failed; nested exception is org.springframework.data.repository.query.QueryCreationException: Could not create query for public abstract java.util.Optional .muscat.repository.SpringReturnReasonRepository.findByCode(java.lang.String)! Reason: Failed to create query for method public abstract java.util.Optional .muscat.repository.SpringReturnReasonRepository.findByCode(java.lang.String)! No property code found for type ReturnReason!; nested exception is java.lang.IllegalArgumentException: Failed to create query for method public abstract java.util.Optional .muscat.repository.SpringReturnReasonRepository.findByCode(java.lang.String)! No property code found for type ReturnReason!
this is the entity:
import lombok.Data;
import lombok.EqualsAndHashCode;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import static javax.persistence.GenerationType.IDENTITY;
@Entity
@Data
@EqualsAndHashCode(of = "id", callSuper = false)
public class ReturnReason {
@Id
@GeneratedValue(strategy = IDENTITY)
private Long id;
@Column
private String reasonCode;
@Column
private String reasonDescription;
@Column
private String reasonType;
}
and this is the
public interface ReturnReasonRepository extends MessageRepository<ReturnReason> {
Optional<ReturnReason> findByCode(String reasonCode);
}
public class ReturnReasonRepositoryImpl implements ReturnReasonRepository {
private final SpringReturnReasonRepository springReturnReasonRepository;
public ReturnReasonRepositoryImpl(SpringReturnReasonRepository springReturnReasonRepository) {
this.springReturnReasonRepository = springReturnReasonRepository;
}
@Override
public Optional<ReturnReason> findByCode(String reasonCode) {
return springReturnReasonRepository.findByCode(reasonCode);
}
@Override
public ReturnReason save(ReturnReason returnReason) {
return springReturnReasonRepository.save(returnReason);
}
public interface SpringReturnReasonRepository extends CrudRepository<ReturnReason, Long>, JpaSpecificationExecutor<ReturnReason> {
Optional<ReturnReason> findByCode(String reasonCode);
}
@Configuration
public class RepositoryConfiguration {
@Bean
public BankInformationRepository bankInformationRepository(SpringBankInformationRepository springBankInformationRepository) {
return new BankInformationRepositoryImpl(springBankInformationRepository);
}
@Bean
public ReturnReasonRepository returnReasonRepository(SpringReturnReasonRepository springReturnReasonRepository) {
return new ReturnReasonRepositoryImpl(springReturnReasonRepository);
}
}
what is my mistake and how can I solve it?
CodePudding user response:
muscat.repository.SpringReturnReasonRepository.findByCode(java.lang.String)! No property code found for type ReturnReason!
This is your error. In SpringReturnReasonRepository
, you have findByCode
but there is no property named code
in your ReturnReason
entity. If you rename this method to findByReasonCode
, it will work.
If you want to know more about JPA repository method naming convention, you can refer this link.