JPA(Hibernate)和自定义表前缀

是否可以覆盖JPA / Hibernate中的表名,以便为所有项目实体添加公共前缀? 例如,能够通过“JBPM5_”前缀为所有JBPM 5表添加前缀。

接受答案的示例:

public class JBPM5NamingStrategy extends ImprovedNamingStrategy { public String classToTableName(String className) { return StringHelper.unqualify(className); } public String propertyToColumnName(String propertyName) { return propertyName; } public String tableName(String tableName) { return "JBPM5_" + tableName; } public String columnName(String columnName) { return columnName; } public String propertyToTableName(String className, String propertyName) { return "JBPM5_" + classToTableName(className) + '_' + propertyToColumnName(propertyName); } } 

一次重命名所有表的一种方法是实现自己的namingStrategy( org.hibernate.cfg.NamingStrategy实现)。

使用的NamingStrategy在persistence.xml中指定

  

使用NamingStrategy 。 我以前的答案应该提供你所需要的。

从以前的答案复制:

下面是一个示例NamingStrategy,它为连接表构建TYPE1_TYPE2forms的表名,并为所有表添加一个公共前缀:

 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("_", ""); } }