搜罗了很多资料,可是只是看到一个,但是还是没有调出来(也没有源码),后来自己试了试ok了。写出来共享一下。
1.实体类:
public class Strategy implements java.io.Serializable {
// Fields
private Integer id;
private String name;
private Integer age;
// Constructors
2.Strategy.hbm.xml 对应的表名是可以省略的,不过在hibernate的配置文件中要加一个东西! hibernate.hbm2ddl.auto
<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <!-- Mapping file autogenerated by MyEclipse Persistence Tools --> <hibernate-mapping> <class name="com.ccms.namingstrategy.Strategy" catalog="hejietest"> <id name="id" type="integer"> <column name="id" /> <generator class="increment" /> </id> <property name="name" type="string"> <column name="name" /> </property> <property name="age" type="integer"> <column name="age" /> </property> </class> </hibernate-mapping>
3.hibernate.cfg.xml 一定要加入<property name="hibernate.hbm2ddl.auto" >update</property>
<property name="hibernate.hbm2ddl.auto" >update</property> <mapping resource="com/ccms/namingstrategy/Strategy.hbm.xml" />
4.MyNamingStrategy
package com.ccms.namingstrategy;
import java.util.Calendar;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.hibernate.cfg.DefaultNamingStrategy;
public class MyNamingStrategy extends DefaultNamingStrategy {
private static Log log = LogFactory.getLog(MyNamingStrategy.class);
public static MyNamingStrategy INSTANCE = new MyNamingStrategy();
@Override
public String classToTableName(String className) {
Calendar cal = Calendar.getInstance();
int year = cal.get(Calendar.YEAR);
int month = cal.get(Calendar.MONTH) + 1;
String tableName = "strategy_"+year+"_"+(month<10?("0"+month):month);
log.info("过滤出来的表名:["+tableName+"]");
return tableName;
}
}
5.HibernateSessionFactory
修改这句
configuration.setNamingStrategy(MyNamingStrategy.INSTANCE).configure(configFile);
/**
其中configuration是
private static Configuration configuration = new Configuration();
*/