gpt4 book ai didi

MySQL 更新其他行以跟踪当前/最新

转载 作者:行者123 更新时间:2023-11-29 18:32:51 30 4
gpt4 key购买 nike

我正在开发一个 Intranet 项目,所以我无法复制/粘贴代码,所以希望我的描述和一些小片段会有所帮助。

我知道 MySQL 触发器无法做到这一点,但希望有一种干净的 JPA PrePersist(或类似)方式(最少的代码。)

我们的查询有点难看,因为我们似乎需要一直找到“最新”。因此,如果我们有一个基于连接表的 PersonCar 实体,那么我们似乎需要找到 person_id = x 和 car_id = y 的最新行。所以我们正在考虑向我们的实体(和数据库表)添加一个 is_current 标志。我们的选择是......

  1. 继续进行类似“where person_car_id = (select max(pc) from PersonCar where person_id = x and car_id = y)”的查询
  2. 使用 View 来获取最新的人/车行
  3. 添加 is_current,将最新的 PersonCar 行设置为 true 并为该 PersonCar 关系的所有其他行设置为 false。

我们想尝试#3。但在 MySQL 中,在插入新行并分配 is_current true 之前,您无法执行预触发来更新具有相同 person_id 和 car_id 的所有其他行,使其 is_current = false。

所以,我正在研究一种 JPA 方法来完成我们想要的事情。

将执行更新的 PrePersist:更新 person_car set is_current = false where person_id = Same_person_id_as_current_insert and car_id = Same_car_id as current_insert;

请注意,我们确实结合使用了来自 UI 的直接 Spring 数据存储库调用以及 Controller 调用。

实现这一目标的最佳方法是什么?

我希望有一种严格的注释方式来执行此操作,或者在实体的方法中添加类似 JDBC 的更新查询,并使用 @PrePersist 或简单的东西对其进行注释。而且,如果人们有充分的理由不这样做,我也愿意倾听。

最佳答案

与其在实体中使用 isCurrent 标志,为什么不在 PrePersist/PreUpdate 方法中更新时间戳。然后在服务器端您可以进行一些简单的日期时间比较来找出哪些对象是最新的。

关于MySQL 更新其他行以跟踪当前/最新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45549569/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com