java - 根据特定条件将实体映射到不同的表

标签 java hibernate jpa orm

我有一个名为 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/

相关文章:

java - 使用 Lucene 从字符串数组中获取所有单词作为标记

java - 如何根据网络服务器上的状态自动更新应用程序变量

java - 如何在黑莓按钮字段上显示文本标签

java - JPQL:SELECT NEW 查询中的枚举文字

grails - 使用JPA 1.0的Grails 2.1.1

java - 导入 JPA 接口(interface)

java - Spring Integration - 服务器重新启动后默认重新处理来自入站文件适配器的消息

java - Hibernate:从不同类路径的jar中自动加载标记为@Entity的类

java - JPA native 查询中可分页

java.io.FileNotFoundException : (No such file or directory) - Working with servlets 错误