首先写个ImprovedNamingStrategy的继承类,复写里面的方法
public class SelfNamingStrategy extends ImprovedNamingStrategy {
public static final String ENTITY_COMMON_PREFIX_PACKAGE_LAYER_NAME = "entity";
public String classToTableName(String className) {
return getLayerNameAbbr(getPackageLastLayer(className))
+ addUnderscores2(className);
}
public String propertyToColumnName(String propertyName) {
return addUnderscores2(propertyName);
}
public String tableName(String tableName) {
return addUnderscores2(tableName);
}
public String columnName(String columnName) {
return addUnderscores2(columnName);
}
protected static String addUnderscores2(String name) {
if (name.endsWith("VOs")) {
name = name.substring(0, name.length() - 3) + "_v_o_s";
}
StringBuffer buf = new StringBuffer(name.replace('.', '_').replace(
"VO", "_v_o"));
// StringBuffer buf = new StringBuffer();
for (int i = 1; i < buf.length() - 1; ++i) {
if ((!(Character.isLowerCase(buf.charAt(i - 1))))
|| (!(Character.isUpperCase(buf.charAt(i))))
|| (!(Character.isLowerCase(buf.charAt(i + 1))))) {
continue;
}
buf.insert(i++, '_');
}
return buf.toString().toLowerCase();
}
public static String getPackageLastLayer(String qualifiedName) {
if (!(qualifiedName.contains("entity.")))
return "";
int loc = qualifiedName.lastIndexOf(".");
if (loc < 0) {
return "";
}
String temp = qualifiedName.substring(0, loc);
int loc1 = temp.lastIndexOf(".");
if (loc1 < 0) {
return temp;
}
return temp.substring(loc1 + 1);
}
public static String getLayerNameAbbr(String layerName) {
if ((StringUtils.isEmpty(layerName))
|| (layerName.equalsIgnoreCase("entity"))) {
return "";
}
StringBuilder sb = new StringBuilder(layerName);
if (layerName.length() < 3) {
return "_".toUpperCase();
}
return sb.charAt(0) + sb.charAt(1) + sb.charAt(sb.length() - 1)
+ "_".toUpperCase();
}
}
然后作为sessionFactory的namingFactory
配置如下:
<bean id="selfNamingStrategy" class="system.core.dao.orm.SelfNamingStrategy"></bean>
<!-- Hibernate配置 -->
<bean id="sessionFactory"
class="system.core.dao.orm.ExtensionAnnotationSessionFactoryBean"
p:namingStrategy-ref="selfNamingStrategy">
......