【问题标题】:JPA event listenerJPA 事件监听器
【发布时间】:2020-04-05 16:25:20
【问题描述】:

我需要构建一个从数据库获取记录的应用程序,等于某个值,如果它返回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);
}

我想检查来自GameLocalDateTime 值是否等于当前LocalDateTime (LocalDateTime.now()),如果是,请执行一些操作。 当然我可以使用@Scheduled 并每隔1小时调用一次方法,但我想知道我所描述的是否可行。

简短总结:

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))。

【问题讨论】:

    标签: java hibernate spring-boot datetime spring-data-jpa


    【解决方案1】:

    我建议安排一个带有注释@Scheduled 的作业,它将使用spring data 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))).
         }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-14
      • 2014-02-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-21
      • 2014-08-23
      相关资源
      最近更新 更多