Ошибка при создании компонента с именем «memberSv», определенным в com.example.accountproject.models.interfaces.Члены определены

#java #spring #mongodb #spring-data-mongodb

Вопрос:

Я студент, изучающий java. Я хочу сделать простую регистрацию членства с помощью Spring boot MongoDB, но возникает ошибка, и я задаю вопрос. мой исходный код

  1. Членто
      public class MemberDTO {
    
         @Id
         private String memberId;
         private String memberPwd;
         private String memberName;
         private String memberEName;
         private String memberCompany;
         private String memberPhone;
         private String memberZipCode;
         private String memberAddress;
         private String memberAddressDetail;
         private String memberAuth;
         @CreatedDate
         private Date createdDate;
     }
     
  2. Элемент управления
      @Controller
     @RequestMapping("/member")
     public class MemberController {
    
    
         @Autowired
         private MemberSv memberSv;
    
         @RequestMapping(value = "/join", method = RequestMethod.POST)
         public String membersave(MemberDTO memberDTO)
         {
             memberSv.membersave(memberDTO);
             return "join_form";
         }
     }
     
  3. Члены в
      @Repository
     public interface MemberSv extends MongoRepository<MemberDTO, String> {
         MemberDTO membersave(MemberDTO memberDTO);
     }
     
  4. Участники ВИМП
      @Service
     @Transactional
     public class MemberSvImp {
    
         @Autowired
         private MemberSv memberSv;
    
         public MemberDTO membersave(MemberDTO memberDTO) {
             return memberSv.save(memberDTO);
         }
     }
     
  5. Основной способ пружинной загрузки
      @EnableMongoRepositories(basePackageClasses =com.example.accountproject.models.interfaces.MemberSv.class)
     @SpringBootApplication
     public class AccountProjectApplication {
    
         public static void main(String[] args) {
             SpringApplication.run(AccountProjectApplication.class, args);
         }
     }
     
  6. Ошибка
 org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'memberController': 
Unsatisfied dependency expressed through field 'memberSv'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'memberSv' defined in com.example.accountproject.models.interfaces.MemberSv defined in @EnableMongoRepositories declared on AccountProjectApplication:     Invocation of init method failed; 
nested exception is org.springframework.data.repository.query.QueryCreationException: Could not create query for public abstract com.example.accountproject.documents.MemberDTO com.example.accountproject.models.interfaces.MemberSv.membersave(com.example.accountproje ct.documents.MemberDTO)! Reason: No property membersave found for type MemberDTO! Did you mean 'memberName'?; nested exception is org.springframework.data.mapping.PropertyReferenceException: No property membersave found for type MemberDTO! Did you mean 'memberName'?
 

Ответ №1:

Во-первых, вы не можете сохранить MemberDTO все как есть MongoRepository . Вам нужно сохранить объект сущности, а не POJO.

Вам необходимо добавить конфигурацию MongoDB, снабдив класс конфигурации комментариями @EnableMongoRepositories

И, наконец, вам нужно убедиться, что вы создали коллекцию (эквивалент MongoDB таблицы в SQL) в MongoDB для сохранения документа-члена (эквивалент MongoDB записи в таблице в SQL).

  1. Класс конфигурации MongoDB.
 @Configuration
@EnableTransactionManagement
@EnableMongoRepositories(basePackages = {"com.example.accountproject.models"})
@PropertySource({"classpath:application.properties"})
public class MongoDBConfiguration{

    @Value("${spring.data.mongodb.host}") // set host in application.properties file
    private String mongoHost; 
    
    @Value("${spring.data.mongodb.port}") // set port in application.properties file
    private int mongoPort;
    
    @Value("${spring.data.mongodb.database}") // set DB name in application.properties file
    private String mongoDatabase;

    @Value("${spring.data.mongodb.user}") // set user in application.properties file
    private String mongoUser;

    @Value("${spring.data.mongodb.password}") // set password in application.properties file
    private String mongoPassword;

    @Bean
    public MongoDbFactory mongoDbFactory() {
        MongoCredential mongoCredential = MongoCredential.createCredential(mongoUser, mongoDatabase, mongoPassword.toCharArray());
        ServerAddress serverAddress = new ServerAddress(mongoHost, mongoPort);
        MongoClient mongoClient = new MongoClient(serverAddress, Arrays.asList(mongoCredential));
        return new SimpleMongoDbFactory(mongoClient, mongoDatabase);
    }

    @Bean
    public MongoTemplate mongoTemplate(@Autowired MongoDbFactory mongoDbFactory) {
        MongoTemplate mongoTemplate = new MongoTemplate(mongoDbFactory);
        return mongoTemplate;
    }
}
 

И удалите @EnableMongoRepositories аннотацию в AccountProjectApplication классе

  1. введите новый класс модели для сущности Member (допустим, имя коллекции — «регистр»).
  @Document(collection = 'register')
 public class Member{
     @Id
     private String memberId;
     private String memberPwd;
     private String memberName;
     private String memberEName;
     private String memberCompany;
     private String memberPhone;
     private String memberZipCode;
     private String memberAddress;
     private String memberAddressDetail;
     private String memberAuth;
     @CreatedDate
     private Date createdDate;

     //getters and setters

}
 
  1. Элемент управления
  @Controller
 @RequestMapping("/member")
 public class MemberController {


     @Autowired
     private MemberSvImp memberService;

     @RequestMapping(value = "/join", method = RequestMethod.POST)
     public String membersave(MemberDTO memberDTO)
     {
         memberService.membersave(memberDTO);
         return "join_form";
     }
 }

 
  1. Уровень обслуживания
 @Service 
@Transactional 
public class MemberSvImp {

    @Autowired
    private MemberSv memberSv;

    public Member membersave(MemberDTO memberDTO){
        Member member = new Member();
        //set member attributes through memberDTO
        //ex : member.setMemberName=memeberDTO.getMemeberName(); 
        return memberSv.save(member);
    }

}
 
  1. Базовая сущность класса репозитория должна быть изменена на Member
 @Repository
public interface MemberSv extends MongoRepository<Member, String> {
    //you can call save(Entity) or saveAndFlush(Entity) of JPARespository directly without defining any custom methods to save new member. 
}
 

ПРЕДЛОЖЕНИЕ : Лучше, если вы сможете переименовать репозиторий и класс обслуживания, чтобы показать их назначение

MemberSv -> Членский состав

MemberSvImp — > Служба участников

Комментарии:

1. так, как я хочу в MemberController, мне было интересно, как использовать membersave интерфейса MemberRespository .

2. @DBK вы должны ввести MemberSvImp туда вместо MemberSv этого . Я обновил свой ответ.

Ответ №2:

где находится ваш файл конфигурации для настройки учетных данных??

Комментарии:

1. github.com/HeoJinHo/accountProject этот проект на github для тебя!! Пожалуйста