Методы, связанные с репозиторием, возвращают только нулевые значения - PullRequest
1 голос
/ 02 октября 2019

У меня есть приложение Spring Boot, в котором я создал сущность, репозиторий и сервис.

Я сохраняю сущности в базе данных с помощью транзакций, и все работает отлично, моя база данных заполнена, как я и ожидал. Кроме того, я должен упомянуть, что моя база данных создана в PHPMyAdmin.

Я также создал репозиторий для извлечения некоторых данных из базы данных путем расширения репозитория Crud. У меня также есть сервис, который хранит методы, которые вызывают хранилище.

Хотя, ни один из методов, которые у меня есть, ничего не возвращает (моя база данных не пуста), и я не знаю почему. Я также попытался добавить @EnableJpaRepositories и @ComponentScan для объекта, но это не сработало. Ниже приведены мои классы:

Сущность (я не буду помещать здесь все методы получения и установки):

@Entity
@Table(name = "matches", schema = "tennis", catalog = "")
public class MatchesEntity {
    private int id;
    private String namePlayer1;
    private String namePlayer2;
    private int setsPlayer1;
    private int setsPlayer2;
    private String odd1;
    private String odd2;
    private String competition;
    private String surface;
    private String status;

    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    @Basic
    @Column(name = "Name_player1")
    public String getNamePlayer1() {
        return namePlayer1;
    }

    public void setNamePlayer1(String namePlayer1) {
        this.namePlayer1 = namePlayer1;
    }

    @Basic
    @Column(name = "Name_player2")
    public String getNamePlayer2() {
        return namePlayer2;
    }

    // other getter & setters
}

Хранилище:

@Repository
public interface MatchesRepository extends CrudRepository<MatchesEntity, 
Integer> {

     List<MatchesEntity> getAllBySurface(String surface);

}

Служба:

@Service
public class MatchesService {

@Autowired
MatchesRepository matchesRepository;

public int countMatchesOnHard() {
    return matchesRepository.getAllBySurface("hard").size();
}

public MatchesEntity findMatchById() {
    return matchesRepository.findById(2378).get();
}

}

Основной класс:

 @SpringBootApplication
 @EnableJpaRepositories(basePackageClasses={MatchesRepository.class})
 @EntityScan(basePackageClasses=MatchesEntity.class)
 public class PicksApplication {

     @Autowired
     static MatchesService matchesService;

     public static void main(String[] args) {
         MatchesEntity matchesEntity = matchesService.findMatchById();
         int numberOfMatchesOnHard = matchesService.countMatchesOnHard();
         System.out.println(numberOfMatchesOnHard);
   }
}

Любой метод, который я пробую и который связан с хранилищем, возвращает ноль. Кто-нибудь может мне помочь с предложением?

1 Ответ

2 голосов
/ 02 октября 2019

Ваш основной класс PicksApplication хлопотно. Метод main должен запускать SpringApplication.run, чтобы пружинная загрузка инициализировала себя и контекст для работы автоматических проводов. Вы нарушаете все это в своем коде. Вы можете использовать CommandLineRunner и добавить свой код в методе run().

Вот так;

@SpringBootApplication
public class PicksApplication implements CommandLineRunner {

    @Autowired
    private MatchesService matchesService;

    public static void main(String[] args) {
        SpringApplication.run(PicksApplication.class, args);
    }

    @Override
    public void run(String... args) throws Exception {
         MatchesEntity matchesEntity = matchesService.findMatchById();
         int numberOfMatchesOnHard = matchesService.countMatchesOnHard();
         System.out.println(numberOfMatchesOnHard);
    }
}

тогда это должно работать, остальной кодвыглядит хорошо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...