Spring boot JPA insert in TABLE with uppercase name with Hibernate

后端 未结 6 984
别那么骄傲
别那么骄傲 2020-12-01 07:08

i have a table entity mapped as :

@Entity
public class ItemsToRegister implements Serializable{

@Id
@Column(name = \"ID_ITEM_TO_REGISTER\")
@GeneratedValue         


        
6条回答
  •  予麋鹿
    予麋鹿 (楼主)
    2020-12-01 07:55

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

    spring.jpa.hibernate.naming.physical-strategy=com.proto.CustomPhysicalNamingStrategy
    

    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();
    
        @Override
        public Identifier toPhysicalCatalogName(Identifier name, JdbcEnvironment context) {
            return capitalize(name);
        }
    
        @Override
        public Identifier toPhysicalSchemaName(Identifier name, JdbcEnvironment context) {
            return capitalize(name);
        }
    
        @Override
        public Identifier toPhysicalTableName(Identifier name, JdbcEnvironment context) {
            return capitalize(name);
        }
    
        @Override
        public Identifier toPhysicalSequenceName(Identifier name, JdbcEnvironment context) {
            return capitalize(name);
        }
    
        @Override
        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);
        }
    }
    

提交回复
热议问题