我正在使用内部网项目,所以我无法复制/粘贴代码,所以希望我的描述和一些小片段能够提供帮助。
我知道MySQL触发器无法做到这一点,但希望JPA PrePersist(或类似)方式干净(最小代码。)
我们的查询有点难看,因为我们似乎总是需要找到“最新的”。因此,如果我们有一个基于连接表的PersonCar实体,那么我们似乎需要找到person_id = x和car_id = y的最新行。所以我们考虑在我们的实体(和数据库表)中添加一个is_current标志。我们的选择是......
所以,我正在研究一种JPA方式来做我们想要的事情。
将进行更新的PrePersist:更新person_car set is_current = false其中person_id = same_person_id_as_current_insert,car_id = same_car_id为current_insert;
请注意,我们确实使用来自UI的直接Spring Data存储库调用以及控制器调用。
实现这一目标的最佳方式是什么?
我希望有一个严格的注释方法来实现这一点,或者在实体的方法中添加类似JDBC的更新查询,并用@PrePersist或简单的东西注释它。但是,如果人们有充分的理由不以这种方式这样做,我也全都倾听。
答案 0 :(得分:0)
不要在实体中使用isCurrent标志,而不是在PrePersist / PreUpdate方法中更新时间戳。然后在服务器端,您可以进行一些简单的DateTime比较,找出哪些对象是最新的。