package fr.openwide.core.jpa.hibernate.model.naming; import org.hibernate.boot.model.naming.Identifier; import org.hibernate.boot.model.naming.PhysicalNamingStrategy; import org.hibernate.engine.jdbc.env.spi.JdbcEnvironment; public class PostgreSQLPhysicalNamingStrategyImpl implements PhysicalNamingStrategy { private static final int IDENTIFIER_MAX_LENGTH = 63; @Override public Identifier toPhysicalCatalogName(Identifier name, JdbcEnvironment jdbcEnvironment) { return truncateIdentifier(name); } @Override public Identifier toPhysicalSchemaName(Identifier name, JdbcEnvironment jdbcEnvironment) { return truncateIdentifier(name); } @Override public Identifier toPhysicalTableName(Identifier name, JdbcEnvironment jdbcEnvironment) { return truncateIdentifier(name); } @Override public Identifier toPhysicalSequenceName(Identifier name, JdbcEnvironment jdbcEnvironment) { return truncateIdentifier(name); } @Override public Identifier toPhysicalColumnName(Identifier name, JdbcEnvironment jdbcEnvironment) { return truncateIdentifier(name); } protected Identifier truncateIdentifier(Identifier name) { if (name == null) { return name; } String text = name.getText(); if (text == null || text.length() <= IDENTIFIER_MAX_LENGTH) { return name; } else { return Identifier.toIdentifier(text.substring(0, IDENTIFIER_MAX_LENGTH), name.isQuoted()); } } }