package com.erp.lhs.utils; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import org.hibernate.AssertionFailure; import org.hibernate.cfg.ImprovedNamingStrategy; import org.hibernate.cfg.NamingStrategy; import org.hibernate.util.StringHelper; public class LocalNamingStrategy implements NamingStrategy { /** * 设置表名前缀。 */ private static String tablePrefix = "LHS_"; /** * Ignore table prefix */ private static List<String> ignorePrefix = new ArrayList<String>(); public void setIgnorePrefix( List<String> ignorePrefix ) { this.ignorePrefix = ignorePrefix; } /** * 设置列名前缀。 */ /* private static String columnPrefix; *//** * 设置是否转换className与propertyName为分词后加下划线的形式。如:AaaBbb->aaa_bbb; * aaaBbb->aaa_bbb。 */ /* private static boolean addUnderScores;*/ @Override public String classToTableName( String className ) { return addUnderscoresForTable( StringHelper.unqualify( className ) ); } @Override public String propertyToColumnName( String propertyName ) { return addUnderscoresForColumn( StringHelper.unqualify( propertyName ) ); } @Override public String tableName( String tableName ) { return addUnderscoresForTable( tableName ); } @Override public String columnName( String columnName ) { return addUnderscoresForColumn( columnName ); } protected static String addUnderscoresForTable( String name ) { StringBuffer buf = new StringBuffer( name.replace( '.', '_' ) ); 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 ) ) ) buf.insert( i++, '_' ); for( String string : ignorePrefix ){ if( name.toUpperCase().startsWith( string.toUpperCase() ) ){ return buf.toString().toUpperCase(); } } return tablePrefix + buf.toString().toUpperCase(); /*if( name.toUpperCase().contains( "ALPS" ) || name.toUpperCase().contains( "DOTJ" ) ){ return buf.toString().toUpperCase(); }*/ } protected static String addUnderscoresForColumn( String name ) { StringBuffer buf = new StringBuffer( name.replace( '.', '_' ) ); 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 ) ) ) buf.insert( i++, '_' ); if( excludeColumnList.contains( buf.toString() ) ){ buf.append( '_' ); } return buf.toString().toUpperCase(); } @Override public String collectionTableName( String ownerEntity, String ownerEntityTable, String associatedEntity, String associatedEntityTable, String propertyName ) { return tableName( ownerEntityTable + '_' + propertyToColumnName( propertyName ) ); } @Override public String joinKeyColumnName( String joinedColumn, String joinedTable ) { return columnName( joinedColumn ); } @Override public String foreignKeyColumnName( String propertyName, String propertyEntityName, String propertyTableName, String referencedColumnName ) { String header = propertyName == null ? propertyTableName : StringHelper.unqualify( propertyName ); if( header == null ) throw new AssertionFailure( "NamingStrategy not properly filled" ); else return columnName( header ); } @Override public String logicalColumnName( String columnName, String propertyName ) { return StringHelper.isNotEmpty( columnName ) ? columnName : StringHelper.unqualify( propertyName ); } @Override public String logicalCollectionTableName( String tableName, String ownerEntityTable, String associatedEntityTable, String propertyName ) { if( tableName != null ) return tableName; else return ownerEntityTable + "_" + ( associatedEntityTable == null ? StringHelper.unqualify( propertyName ) : associatedEntityTable ); } @Override public String logicalCollectionColumnName( String columnName, String propertyName, String referencedColumn ) { return StringHelper.isNotEmpty( columnName ) ? columnName : StringHelper.unqualify( propertyName ) + "_" + referencedColumn; } public static final NamingStrategy INSTANCE = new ImprovedNamingStrategy(); private static final List<String> excludeColumnList = Arrays.asList( new String[]{ "ACCESS", "AUDIT", "COMPRESS", "DESC", "ADD", "BETWEEN", "CONNECT", "DISTINCT", "ALL", "BY", "CREATE", "DROP", "ALTER", "CHAR", "CURRENT", "ELSE", "AND", "CHECK", "DATE", "EXCLUSIVE", "ANY", "CLUSTER", "DECIMAL", "EXISTS", "AS", "COLUMN", "DEFAULT", "FILE", "ASC", "COMMENT", "DELETE", "FLOAT", "FOR", "LONG", "PCTFREE", "SUCCESSFUL", "FROM", "MAXEXTENTS", "PRIOR", "SYNONYM", "GRANT", "MINUS", "PRIVILEGES", "SYSDATE", "GROUP", "MODE", "PUBLIC", "TABLE", "HAVING", "MODIFY", "RAW", "THEN", "IDENTIFIED", "NETWORK", "RENAME", "TO", "IMMEDIATE", "NOAUDIT", "RESOURCE", "TRIGGER", "IN", "NOCOMPRESS", "REVOKE", "UID", "INCREMENT", "NOT", "ROW", "UNION", "INDEX", "NOWAIT", "ROWID", "UNIQUE", "INITIAL", "NULL", "ROWNUM", "UPDATE", "INSERT", "NUMBER", "ROWS", "USER", "INTEGER", "OF", "SELECT", "VALIDATE", "INTERSECT", "OFFLINE", "SESSION", "VALUES", "INTO", "ON", "SET", "VARCHAR", "IS", "ONLINESHARE", "VARCHAR2", "LEVEL", "OPTION", "SIZE", "VIEW", "LIKE", "OR", "SMALLINT", "WHENEVER", "LOCK", "ORDER", "START", "WHERE", "WITH" } ); }