@Scheduled не обновляет мои значения JSON до FALSE

Я пытаюсь установить для всех значений столбца моего банка H2 значение false в 13:00, но у меня возникают трудности с этим, сообщение печатается на консоли, но голоса остаются ИСТИННЫМИ.

Моя таблица выглядит так, я бы хотел, чтобы каждый день в 13:00 значения поля VOTED были FALSE

Я БЫЭЛ. АДРЕСПАРОЛЬНАЗВАНИЕПРОГОЛОСОВАЛИ
1бруно@gmail.com$2a$10$j1Eic8Okp.IczSVQbU.ru.s.dXoxd1fdzWtK2os9oE9y9ZO8wvMx6БруноПРАВДА
2Джеймс@gmail.com$2a$10$F/KLm5ULaNRVEL/K6MMeveZXr770G5cI3S7HZnEw.b7TZDENkCWBCДжеймсПРАВДА
3роберт@gmail.com$2a$10$uHZjSrroGBtRBB/V.norRuOcDVz42MXnm0/2yLPGpE3P5XtPRo7L6РобертЛОЖНЫЙ

Это логика, которую я использую в своем UserServices.java.

Несмотря на то, что проект запущен, пользователи остаются ИСТИННЫМИ по истечении времени, указанного в @Scheduled.

@Scheduled(cron = "0 00 13* * *")
    public void resetVotes() throws InterruptedException {
            
    List<User> userArray = repository.findAll();
    for(User user: userArray ) {
        user.setVoted(false);
    }
}

И это сообщение, которое я получаю на консоли, когда прихожу ко времени, указанному в @Scheduled

Hibernate: 
    select
        user0_.id as id1_1_,
        user0_.email as email2_1_,
        user0_.password as password3_1_,
        user0_.name as name4_1_,
        user0_.voted as voted5_1_ 
    from
        db_users user0_

Вот классы, которые я использую для проекта:

Пользователь.java

package com.dbserver.restaurantes.entities;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name = "db_users")
public class User {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(name = "Name")
    private String username;
    private String email;
    private String password;
    private Boolean voted = false;

    public Long getId() {
        return id;
    }

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

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public Boolean getVoted() {
        return voted;
    }

    public void setVoted(Boolean voted) {
        this.voted = voted;
    }

}

UserDTO.java

package com.dbserver.restaurantes.dto;

import com.dbserver.restaurantes.entities.User;

public class UserDTO {
    private Long id;
    private String username;
    private String email;
    private String password;
    private Boolean voted = false;

    public UserDTO() {
    }

    public UserDTO(Long id, String username, String email, String password, Boolean voted) {
        this.id = id;
        this.username = username;
        this.email = email;
        this.password = password;
        this.voted = voted;
    }

    public UserDTO(User user) {
        id = user.getId();
        username = user.getUsername();
        email = user.getEmail();
        password = user.getPassword();
        voted = user.getVoted();
    }

    public Long getId() {
        return id;
    }

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

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public Boolean getVoted() {
        return voted;
    }

    public void setVoted(Boolean voted) {
        this.voted = voted;
    }

    
}

UserServices.java

package com.dbserver.restaurantes.services;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.dbserver.restaurantes.entities.User;
import com.dbserver.restaurantes.exceptions.HttpClientErrorException;
import com.dbserver.restaurantes.repositories.UserRepository;

@Service
public class UserServices {

    @Autowired
    private UserRepository repository;

    PasswordEncoder passwordEncoder;

    public UserServices(UserRepository userRepository) {
        this.passwordEncoder = new BCryptPasswordEncoder();
    }

    @SuppressWarnings("rawtypes")
    @Transactional(readOnly = true)
    public List<User> findAllUsers(List list) {
        List<User> result = repository.findAll();
        return result;
    }

    @Transactional
    public User addUser(User newUser) {
        if (repository.findByEmail(newUser.getEmail()) != null) {
            throw new HttpClientErrorException("O e-mail informado já existe no sistema");
        }
        String encodedPassword = this.passwordEncoder.encode(newUser.getPassword());
        newUser.setPassword(encodedPassword);
        return repository.saveAndFlush(newUser);
    }
    
    @Scheduled(cron = "0 00 13* * *")
      public void resetVotes() throws InterruptedException {
        
        List<User> userArray = repository.findAll();
        for(User user: userArray ) {
            user.setVoted(false);
        }
      }

}

UserRepository.java

package com.dbserver.restaurantes.repositories;

import org.springframework.data.jpa.repository.JpaRepository;

import com.dbserver.restaurantes.entities.User;

public interface UserRepository extends JpaRepository<User, Long> {

    User findByEmail(String email);
}

UserController.java

package com.dbserver.restaurantes.controllers;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.dbserver.restaurantes.entities.User;
import com.dbserver.restaurantes.services.UserServices;

@RestController
@RequestMapping(value = "/users")
public class UserController {

    @Autowired
    private UserServices service;

    @PostMapping
    public User addUser(@RequestBody User newUser) {
        return service.addUser(newUser);
    }

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

Ответы 2

Ответ принят как подходящий

Я думаю, вам нужно повторно обновить список пользователей после setVoted(false)

@Scheduled(cron = "0 00 13* * *")
public void resetVotes() throws InterruptedException {
            
    List<User> userArray = repository.findAll();
    for(User user: userArray ) {
        user.setVoted(false);
    }

    repository.save(userArray);
} 

Вам не нужно загружать всех пользователей из БД.

Вы можете просто обновить данные с помощью пользовательского запроса.

   @Scheduled(cron = "0 00 13* * *")
    public void resetVotes() throws InterruptedException {
                
        repository.resetVotes();
    }

UserRepository.java

package com.dbserver.restaurantes.repositories;

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import com.dbserver.restaurantes.entities.User;

public interface UserRepository extends JpaRepository<User, Long> {

User findByEmail(String email);

//update custom query 
@Modifying
@Query("update User set voted=false ")
int resetVotes();

}

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