Я пытаюсь вернуть данные из базы данных mongo, используя данные Springboot и jdbc
вот мой POM.xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-mongodb</artifactId>
</dependency>
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongodb-driver</artifactId>
</dependency>
Проблема, с которой я столкнулся, заключается в том, что я могу выполнить .findAll () только в моем репозитории. Когда я пытаюсь использовать свой собственный метод
.getAllByRegistration_numberIs(VehRegId);
Я получаю ошибку,
java.lang.IllegalStateException: Failed to load ApplicationContext Error creating bean with name 'readService': Unsatisfied dependency expressed through field 'vr'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'vehicleRegistrationRepository': Invocation of init method failed; nested exception is org.springframework.data.mapping.PropertyReferenceException: No property registration found for type vehicle_registration!
Моя служба
@Component
public class ReadService {
@Autowired
VehicleRegistrationRepository vr;
public List<vehicle_registration> getReg(String VehRegId) {
//This works
//return (List<vehicle_registration>) vr.findAll();
//This doesn't work
return (List<vehicle_registration>) vr.getAllByRegistration_numberIs(VehRegId);
}
}
Мой репозиторий
@Repository
public interface VehicleRegistrationRepository extends CrudRepository<vehicle_registration, String> {
vehicle_registration getAllByRegistration_numberIs(String VehRegNo);
}
И мой Объект
@Getter
@Setter
@ToString
public class vehicle_registration {
/*
This class must have the same name as the collection in mongodb
*/
@Id
String _id;
Integer OwnID;
Integer mileage_of_lasttransfer;
Date date_of_registration;
Date date_of_last_transfer;
String registration_number;
String UUID;
String personUUID;
String vehicleUUID;
Date time_stamp;
}
Попробуйте использовать эту зависимость spring-boot-starter-data-mongodb. Если я правильно помню, Spring переводит символы подчеркивания в camelCase
Привет, я внес эти изменения, поэтому его VehicleRegistration и VehicleRegistrationRepository возвращаются в список и получают ту же ошибку.
Вы хотите получить поле registration_number от объекта vehicle_registration? @Kaigo
Вы тоже переименовали недвижимость?
Ага "registration_number": "J75787" из коллекции vehicleRegistration, которую я пытаюсь получить. Не уверены, что вы имеете в виду, переименовать свойства?




@Repository
public interface VehicleRegistrationRepository extends CrudRepository<vehicle_registration, String> {
List<vehicle_registration> findAllByRegistrationNumber(String VehRegNo);
}
Вы можете найти, как написать запрос с данными Spring jpa документация Кроме того, вам нужно изменить имя вашего класса VehicleRegistration и имя ваших полей.
спасибо, что уже реализовал это из комментариев, и без изменений. Я не хотел бы использовать запросы выбора и использовать данные jpa и spring.
попробуйте еще раз вот так, пожалуйста @Kaigo
Я не хочу использовать jpa, это вызывает конфликты в моем проекте и не так полезно для базы данных nosql, такой как mongo.
Вам нужно добавить @Entity в свой класс vehicle_registration
@Entity
@Getter
@Setter
@ToString
public class vehicle_registration {
/*
This class must have the same name as the collection in mongodb
*/
@Id
String _id;
Integer OwnID;
Integer mileage_of_lasttransfer;
Date date_of_registration;
Date date_of_last_transfer;
String registration_number;
String UUID;
String personUUID;
String vehicleUUID;
Date time_stamp;
}
После этого он должен работать.
Я не использую JPA, поэтому у меня нет доступного @Entity, и если я добавлю зависимость, я получу ошибку Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration': Unsatisfied dependency expressed through constructor parameter 0; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'javax.sql.DataSource' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {}
@haticeSigirci ведет меня по правильному пути.
Решил это с
@Query("{registration_number: ?0}")
List<VehicleRegistration> getAllByRegistration_numberQuery(String registration_number);
По сути, встроенные запросы, такие как .findAll, работают из коробки, однако для пользовательских запросов требуется оператор @query.
классы в java должны начинаться с заглавной буквы, используйте аннотацию
@Document, чтобы получить ссылку на коллекцию. Метод, который возвращает несколько сущностей (getВсе), будет нуждаться вList<VehicleRegistration>(или любой итерируемой) в качестве возвращаемого типа, измените это в своем репозитории. Репозиторий должен называться как класс сущности, поэтому он должен бытьVehicleRegistration->VehicleRegistrationRepository. Также убедитесь, что файл, содержащий VehicleRegistration, назван как класс. Я бы не стал использовать все символы подчеркивания для ваших свойств, вместо этого используйте аннотацию@Field. jdbc предназначен для sql