您需要创建一个自定义的NamingStrategy。
假设您在JPA中使用spring和hibernate,这是带有自定义NamingStrategy的配置代码段:
<bean id="entityManagerFactory" > <property name="persistenceUnitName" value="myunit" /> <property name="dataSource" ref="dataSource" /> <property name="persistenceXmlLocation" value="classpath:meta-INF/persistence.xml" /> <property name="jpaVendorAdapter"> <bean > <property name="showSql" value="false" /> <property name="generateDdl" value="true" /> <property name="database" value="MYSQL" /> </bean> </property> <property name="jpaProperties"> <props> <prop key="hibernate.ejb.naming_strategy"> com.yourcompany.CustomNamingStrategy </prop> </props> </property></bean>
如果不使用spring,配置将有所不同,但是您仍然可以使用自定义的NamingStrategy(请参阅Hibernate文档中的实现NamingStrategy)。
无论如何,这是一个示例NamingStrategy,它为连接表构建TYPE1_TYPE2形式的表名,并为所有表添加一个公共前缀:
public class CustomNamingStrategy extends ImprovedNamingStrategy { private static final long serialVersionUID = 1L; private static final String PREFIX = "PFX_"; @Override public String classToTableName(final String className) { return this.addPrefix(super.classToTableName(className)); } @Override public String collectionTableName(final String ownerEntity, final String ownerEntityTable, final String associatedEntity, final String associatedEntityTable, final String propertyName) { return this.addPrefix(super.collectionTableName(ownerEntity, ownerEntityTable, associatedEntity, associatedEntityTable, propertyName)); } @Override public String logicalCollectionTableName(final String tableName, final String ownerEntityTable, final String associatedEntityTable, final String propertyName) { return this.addPrefix(super.logicalCollectionTableName(tableName, ownerEntityTable, associatedEntityTable, propertyName)); } private String addPrefix(final String composedTableName) { return PREFIX + composedTableName.toUpperCase().replace("_", ""); }}


