Hibernate动态生成表名

现在做的系统需要每天生成一张表,将数据插入进去,原先一直是直接使用JDBC+SQL语句实现的,后来在网上找到关于用hibernate实现的方法,试了一下都没有成功,主要是我的hibernate里面的PersistentClass没有setTable方法,很奇怪大家的文章里面都说有,于是改进了一下,总算也是实现啦

 

创建新表的代码如下:

private static String createNewTable(String tableName) {
        try {
            Configuration cfg = app.getConfiguration();
            if(cfg == null)
                return "Hibernate configuration is null !";
            String str = AnalogHistoryData.class.getName();
            PersistentClass pc = cfg.getClassMapping(str);
            if(pc == null)
                return "The persistent class of AnalogHistoryData is null !";
            Table table = pc.getTable();
            if(table.getName().equalsIgnoreCase(tableName))
                return null;
            table.setName(tableName);
            app.setConfiguration(cfg);
            app.reload();
        } catch (HibernateException e) {
            return e.toString();
        }

        return null;
    }

 其中AnalogHistoryData是一个持久化类,app是一个封装的关于Hibernate的configuration的类的对象。

 

查询方法如下:

public static AnalogHistoryData getAnalogHistoryDataById(String deviceId, String dataType, java.util.Date queryDate) {
        if (deviceId == null || dataType == null || queryDate == null) {
            return null;
        }
        if (!(dataType.equalsIgnoreCase("KV") || dataType.equalsIgnoreCase("MVAR") || dataType.equalsIgnoreCase("MW"))) {
            return null;
        }
        checkTableIsExisted(dataType, queryDate);
        String sql = "from AnalogHistoryData as ah where ah.deviceId = '" + deviceId + "'";

        return app.query(sql);
    }

 

checkTableIsExisted方法,就是根据条件生成一个表名,然后创建这个表。这样做主要不好的地方就是查询的地方,比如说今天是7月2号,数据库中存在历史表,但是7月1号,数据库中没有历史表,当查询7月1号的数据的时候,会自动的在数据库中将7月1号的空历史表建出来,当然,这也不影响查询结果。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值