public Session getSession(Class clz){
String tablename="";
Table anno = (Table) clz.getAnnotation(Table.class);
if(anno!=null)tablename=anno.name();
SessionBuilder builder = this.sessionFactory.withOptions().interceptor(new AutoTableNameInterceptor(tablename));
Session session = builder.openSession();
return session;
}
import org.apache.commons.lang.StringUtils;
import org.hibernate.EmptyInterceptor;
public class AutoTableNameInterceptor extends EmptyInterceptor {
private String tablename = StringUtils.EMPTY; //源表名
public AutoTableNameInterceptor() {}
public AutoTableNameInterceptor(String tablename){
this.tablename = tablename;
}
@Override
public String onPrepareStatement(String sql) {
if(tablename.equals(StringUtils.EMPTY)){
return sql;
}
sql = sql.replaceAll(tablename, "bak_"+tablename);
return sql;
}
}
在调用getsession时,会自动将入参的实体对应的table注解转换为bak_开头的表名
@Entity
@Table(name="wms_trade_header")