• SQLQuery实现动态表映射


    节选自:《Hibernate开发与实战》(刘伟、张利国,电子工业出版社,2009.9)

    有时候需要动态操作表的数据。如通过数据库记录日志信息时每个月产生一张日志表,结构都一样只是表名不同。表名取log200902等。可以利用SQLQuery对象的addEntity()动态关联持久化类和数据库表。

    1.oracle表

    1 create table log201112(
    2 id number(8) not null,
    3 content varchar2(1000),
    4 create_time varchar2(20) not null,
    5 primary key(id)
    6 );
    7 create sequence log_seq start with 1 increment by 1;

    2..映射文件中mutable=false ,table为虚的

     1 <?xml version="1.0" encoding="UTF-8"?>
    2 <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD3.0//EN"
    3 "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >

    4 <hibernate-mapping>
    5 <class name="com.tazi.domin.Log" table="log" mutable="false">
    6 <id name="id" type="java.lang.Integer">
    7 <column name="ID"/>
    8 <generator class="increment"/>
    9 </id>
    10 <property name="content" type="string" column="CONTENT"/>
    11 <property name="createTime" type="java.util.Date" column="CREATE_TIME"/>
    12 </class>
    13 </hibernate-mapping>

    3.保存数据

     1 public void save(Log log){
    2 Session session=getSession();//自定义方法,事务的开启和提交在其他地方控制
    3 DateFormat df=new SimpleDateFormat("yyyyMM");

    4 String sql="insert into log"+df.format(new Date())+
    5 "(id,content,create_time) values(log_seq.nextval,?,?)";
    6 SQLQuery query=session.createSQLQuery(sql);
    7 query.setString(0, log.getContent());
    8 query.setTimestamp(1, log.getCreateTime());//如果用setDate只会保存年月信息
    9 query.executeUpdate();
    10 }

    4.获取

     1 public Log getLog(Integer id){
    2 Session session=getSession();
    3 DateFormat df=new SimpleDateFormat("yyyyMM");
    4 String sql="select log.* from log"+df.format(new Date())+
    5 " log where id=?";
    6 SQLQuery query=session.createSQLQuery(sql);
    7 query.setInteger(0, id);
    8 query.addEntity("log",Log.class);
    9 Log log=(Log)query.uniqueResult();
    10 return log;
    11 }





  • 相关阅读:
    【NOIP2013】货车运输 最大生成树+LCA
    【NOIP2017】逛公园 拆点最短路+拓扑(记忆化搜索
    【NOIP2016】愤怒的小鸟 搜索
    洛谷9月月赛II 赛后瞎写
    java基础--第八天
    java基础--第七天
    Java基础--第六天
    Java基础--第五天
    Java基础---第四天
    Java基础--第三天
  • 原文地址:https://www.cnblogs.com/tazi/p/2294167.html
Copyright © 2020-2023  润新知