微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何创建一个拦截器,在达到预定义的记录限制后在插入时删除旧记录 (LIFO)?

如何解决如何创建一个拦截器,在达到预定义的记录限制后在插入时删除旧记录 (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 举报,一经查实,本站将立刻删除。