java根据特定条件将实体映射到不同的表
我有一个名为Transaction的实体,它在数据库中的相关表是TAB_TRANSACTIONS。整个系统运行良好;现在,出现了一个新的要求,客户要求将所有超过30天的事务移到另一个存档表中,例如TAB_transactions_HIST
目前,作为一项工作,我给了他们一个脚本,计划每24小时运行一次,它只需将数据从源移动到目标
我想知道使用hibernate有没有更好的解决方案
我是否可以获取事务实体,然后将它们存储在TAB_TRANSACTIONS_HISTORY中?我看了很多类似的问题,但找不到解决办法,任何建议都会有帮助
# 1 楼答案
你需要某种安排机制。要么是周期性唤醒的线程,要么是适合您的其他触发器
也可以使用批量插入操作
(将…替换为实际字段)
您还可以使用“where子句”,该子句可用于根据条目的使用年限来缩减结果
# 2 楼答案
您可能需要为此任务创建quartz计划程序。下面是调度程序的
Job
另一方面,hibernate不提供调度器,因此您无法使用核心hibernate执行此活动,因此您需要像quartz调度器这样的外部API
# 3 楼答案
我认为,只有依赖于两种不同的持久性上下文,才能实现您搜索的解决方案
单个持久性上下文以非动态的方式将实体映射到表,因此不能执行从映射表到另一个表的“运行时切换”。 但是,您可以创建一个不同的持久性上下文(或者在hibernate中创建一个并行配置,而不是使用两个不同的上下文),然后在不同的EntityManager中加载这个新配置,并执行所有任务
这是目前唯一想到的解决方案。真的不知道这是否足够
# 4 楼答案
我认为每24小时运行一次脚本是个好主意。 如果你不高兴,你可以减少间隔时间
但是如果你已经有了一个工作脚本,那么你的实际问题在哪里呢? 我认为最好的方法是检查所有交易的账龄,并将超过30天的交易移至另一个列表或地图