Spring boot JPA insert in TABLE with uppercase name with Hibernate

On hibernate 5, it would be


in your application.properties file.

The solution it's add :


to the application.properties :)


As @jasonleakey suggested we can consider using naming-strategy as below.


this tells Hibernate to generate SQL's as exactly as specified in the @Table (name=" ") or @Column(name=" "). All well.

But keep in mind - while using PhysicalNamingStrategy without @Table, @Column annotations in the entity class, hibernate generates SQL using class name and variable names. Consider the below java class

Class Employee {
   private String firstName;
   private String lastName; 

then the generated sql would be,

select employee0_.firstName,employee0_lastName from Employee employee0_;

Unfortunately this is not a great choice as typically we would have defined the columns in DB as FIRST_NAME and LAST_NAME and table name as EMPLOYEE. Had you not used PhysicalNamingStrategy the SQL would have been

select employee0_.first_name,employee0_last_name from employee employee0_;

so it's really a choice between the below two options.

  • Use PhysicalStrategy and explicitly define all tables names/column names in java code with @Table and @Column annotations.
  • Define lowercase table name in db and let hibernate automatically generate table names/column names for us.

You'll need to escape the table name with tics(`) to make it case sensitive.

@Table(name = "`ITEMS_TO_REGISTER`")

You can implement your own strategy and invoke it from application.properties:


Bellow an example that always capitalize the first letter

import java.io.Serializable;
import org.apache.commons.lang3.StringUtils;
import org.hibernate.boot.model.naming.Identifier;
import org.hibernate.boot.model.naming.PhysicalNamingStrategy;
import org.hibernate.engine.jdbc.env.spi.JdbcEnvironment;

public class CustomPhysicalNamingStrategy implements PhysicalNamingStrategy, Serializable {
     * Singleton access
    public static final CustomPhysicalNamingStrategy INSTANCE = new CustomPhysicalNamingStrategy();

    public Identifier toPhysicalCatalogName(Identifier name, JdbcEnvironment context) {
        return capitalize(name);

    public Identifier toPhysicalSchemaName(Identifier name, JdbcEnvironment context) {
        return capitalize(name);

    public Identifier toPhysicalTableName(Identifier name, JdbcEnvironment context) {
        return capitalize(name);

    public Identifier toPhysicalSequenceName(Identifier name, JdbcEnvironment context) {
        return capitalize(name);

    public Identifier toPhysicalColumnName(Identifier name, JdbcEnvironment context) {
        return capitalize(name);

    private Identifier capitalize(Identifier name) {
        if (name == null)
            return null;
        if (name.isQuoted())
            return name;
        String text = StringUtils.capitalize(name.getText());
        return Identifier.toIdentifier(text);

You can try:

@Table(name = "ITEMS_TO_REGISTER")
public class ItemsToRegister implements Serializable {