我需要构建一个从数据库获取记录的应用程序,该记录等于某个值,如果返回true,它将执行某人操作。我想知道JPA是否可以做类似的事情。

我有一个实体Game

@Data
@Entity
public class Game {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    public Game() {

    }

    @OneToOne
    private Team teamBlue;

    @OneToOne
    private Team teamRed;

    @DateTimeFormat(pattern = "HH:mm:ss yyyy-MM-dd")
    private LocalDateTime localDateTime;
}


GameRepository返回Game

@Repository
public interface GameRepository extends JpaRepository<Game, Long> {
    @Override
    Optional<Game> findById(Long aLong);
}


我想检查LocalDateTime中的Game值是否等于当前的LocalDateTimeLocalDateTime.now()),如果是,请执行一些操作。
当然,我可以每1小时使用@Scheduled和call方法,但是我想知道我所描述的内容是否可行。

简短的摘要:

数据库中Game实体的LocalDateTime = 2020-04-05 21:00:00

当前日期时间:2020-04-05 12:00:00(不执行任何操作,因为当前日期时间不等于Game日期时间)

[9小时后]

数据库中的Game实体(不可变),其中LocalDateTime = 2020-04-05 21:00:00

当前日期时间:2020-04-05 21:00:00(当前日期时间与Game的日期时间匹配,因此请执行一些操作(例如System.out.println(game)))。

最佳答案

我建议安排一个带有注释@Scheduled的作业,该作业将使用spring数据jpa处理数据库中的数据。

@Scheduled(fixedRate=0 * * * *)
@Transactional
public void scheduleGameJob() {
    Optional<Game> game = gameRepo.findById(1L);
    if (game.isPresent()) {
     LocalDateTime gameTime = game.get().getLocalDateTime();
     if (gameTime.equals(LocalDateTime.now())) {
      //do some action (for example System.out.println(game))).
     }
    }
}

09-10 08:13
查看更多