如何解决如何创建一个拦截器,在达到预定义的记录限制后在插入时删除旧记录 (LIFO)?
休眠问题
我想确保每个 UID 最多有 X 条记录(非唯一)。
当达到限制时,我希望 hibernate 在插入新记录之前/之后删除“last in”记录。
表格示例: 消息
UID| ID | MESSAGE
YY 1 "1"
YY 2 "2"
例如:对于 UID 的 2 条消息的限制,新消息“3”将删除消息“1”,因此表格最终有 2 条消息用于相同的“YY”UID。
预期结果:
UID| ID | MESSAGE
YY 2 "2"
YY 3 "3"
解决方法
您可以使用 PostPersist
JPA Entity Listener in hibernate 来持久化您的实体实例。实体侦听器然后查询并删除超出限制的实例。
由于您标记了 spring-data-jpa
,您还可以在 spring(参见 transaction bound events)阶段在 TransactionalEventListener
中使用 BEFORE_COMMIT
,它与实体侦听器执行相同的操作。>
不同之处在于事务事件侦听器每个事务只会调用一次,而实体侦听器可以根据每个事务持久化的实例数调用多次。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。