#java #spring #mongodb #spring-data-mongodb
Вопрос:
Я студент, изучающий java. Я хочу сделать простую регистрацию членства с помощью Spring boot MongoDB, но возникает ошибка, и я задаю вопрос. мой исходный код
- Членто
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; }
- Элемент управления
@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"; } }
- Члены в
@Repository public interface MemberSv extends MongoRepository<MemberDTO, String> { MemberDTO membersave(MemberDTO memberDTO); }
- Участники ВИМП
@Service @Transactional public class MemberSvImp { @Autowired private MemberSv memberSv; public MemberDTO membersave(MemberDTO memberDTO) { return memberSv.save(memberDTO); } }
- Основной способ пружинной загрузки
@EnableMongoRepositories(basePackageClasses =com.example.accountproject.models.interfaces.MemberSv.class) @SpringBootApplication public class AccountProjectApplication { public static void main(String[] args) { SpringApplication.run(AccountProjectApplication.class, args); } }
- Ошибка
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).
- Класс конфигурации 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
классе
- введите новый класс модели для сущности
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
}
- Элемент управления
@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";
}
}
- Уровень обслуживания
@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);
}
}
- Базовая сущность класса репозитория должна быть изменена на
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 для тебя!! Пожалуйста