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 }





转载于:https://www.cnblogs.com/tazi/archive/2011/12/20/2294167.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值