JPA (Hibernate) y prefijos de tabla personalizados

¿Es posible anular los nombres de tabla en JPA / Hibernate para agregar un prefijo común para todas las entidades de proyecto? Por ejemplo, para poder prefijar todas las tablas JBPM 5 por el prefijo “JBPM5_”.

Ejemplo para la respuesta aceptada:

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); } } 

Una forma de cambiar el nombre de todas las tablas a la vez es implementar su propia estrategia de naming (implementación de org.hibernate.cfg.NamingStrategy ).

La NamingStrategy utilizada se especifica en persistence.xml por

  

Usa una estrategia de naming . Esta respuesta previa mía debería proporcionar exactamente lo que necesita.

Copiado de la respuesta anterior:

Aquí hay un ejemplo de NamingStrategy que crea nombres de tabla del formulario TYPE1_TYPE2 para unir tablas y agrega un prefijo común a todas las tablas:

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