我有一个名为 Transaction 的实体,其在数据库中的相关表是 TAB_TRANSACTIONS。整个系统运行良好;现在出现了一个新要求,客户要求将所有超过 30 天的交易移至另一个存档表,例如TAB_TRANSACTIONS_HIST。
目前,作为解决办法,我给了他们一个计划每 24 小时运行一次的脚本,该脚本只是将数据从源移动到目标。
我想知道使用 hibernate 有没有更好的解决方案?
我可以获取事务实体然后将它们存储在 TAB_TRANSACTIONS_HISTORY 中吗?我看过很多类似的问题,但找不到解决方案,任何建议都会有帮助。
最佳答案
您可能想为此任务创建一个quartz调度程序。这是调度程序的 Job
public class DatabaseBackupJob implements Job {
public void execute(JobExecutionContext jec) throws JobExecutionException {
Configuration cfg=new Configuration();
cfg.configure("hibernate.cfg.xml");
Session session = cfg.buildSessionFactory().openSession();
Query q = session.createQuery("insert into Tab_Transaction_History(trans) select t.trans as trans from Tab_Transaction t where t.date < :date")
.setParameter("date", reqDate);
try{
Trasaction t = session.beginTransaction();
q.executeNonQuery();
t.commit();
} catch(Exception e){
} finally {
session.close();
}
}
}
附注hibernate 不提供调度程序,因此您无法使用核心 hibernate 执行此 Activity ,因此您需要像quartz调度程序这样的外部API
关于java - 根据特定条件将实体映射到不同的表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10546577/