Данные Springboot - регистрация собственности не найдена

Я пытаюсь вернуть данные из базы данных 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;
}

классы в java должны начинаться с заглавной буквы, используйте аннотацию @Document, чтобы получить ссылку на коллекцию. Метод, который возвращает несколько сущностей (getВсе), будет нуждаться в List<VehicleRegistration> (или любой итерируемой) в качестве возвращаемого типа, измените это в своем репозитории. Репозиторий должен называться как класс сущности, поэтому он должен быть VehicleRegistration -> VehicleRegistrationRepository. Также убедитесь, что файл, содержащий VehicleRegistration, назван как класс. Я бы не стал использовать все символы подчеркивания для ваших свойств, вместо этого используйте аннотацию @Field. jdbc предназначен для sql

baao 07.06.2018 18:36

Попробуйте использовать эту зависимость spring-boot-starter-data-mongodb. Если я правильно помню, Spring переводит символы подчеркивания в camelCase

baao 07.06.2018 18:41

Привет, я внес эти изменения, поэтому его VehicleRegistration и VehicleRegistrationRepository возвращаются в список и получают ту же ошибку.

Kaigo 07.06.2018 19:12

Вы хотите получить поле registration_number от объекта vehicle_registration? @Kaigo

Hatice 07.06.2018 19:18

Вы тоже переименовали недвижимость?

baao 07.06.2018 19:18

Ага "registration_number": "J75787" из коллекции vehicleRegistration, которую я пытаюсь получить. Не уверены, что вы имеете в виду, переименовать свойства?

Kaigo 07.06.2018 19:21
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
6
81
3

Ответы 3

@Repository
public interface VehicleRegistrationRepository extends CrudRepository<vehicle_registration, String> {

    List<vehicle_registration> findAllByRegistrationNumber(String VehRegNo);

}

Вы можете найти, как написать запрос с данными Spring jpa документация Кроме того, вам нужно изменить имя вашего класса VehicleRegistration и имя ваших полей.

спасибо, что уже реализовал это из комментариев, и без изменений. Я не хотел бы использовать запросы выбора и использовать данные jpa и spring.

Kaigo 07.06.2018 19:31

попробуйте еще раз вот так, пожалуйста @Kaigo

Hatice 07.06.2018 19:42

Я не хочу использовать jpa, это вызывает конфликты в моем проекте и не так полезно для базы данных nosql, такой как mongo.

Kaigo 08.06.2018 10:50

Вам нужно добавить @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.UnsatisfiedDependencyExcep‌​tion: Error creating bean with name 'org.springframework.boot.autoconfigure.orm.jpa.HibernateJpa‌​AutoConfiguration': Unsatisfied dependency expressed through constructor parameter 0; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionExcept‌​ion: No qualifying bean of type 'javax.sql.DataSource' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {}

Kaigo 08.06.2018 10:09

@haticeSigirci ведет меня по правильному пути.

Решил это с

@Query("{registration_number: ?0}")
List<VehicleRegistration> getAllByRegistration_numberQuery(String registration_number);

больше информации здесь

По сути, встроенные запросы, такие как .findAll, работают из коробки, однако для пользовательских запросов требуется оператор @query.

Другие вопросы по теме