복붙노트

[SPRING] 테이블 이름을 변경하는 Hibernate 명명 전략

SPRING

테이블 이름을 변경하는 Hibernate 명명 전략

나는 약간의 최대 절전 모드 (version 5.1) 명명 전략에 혼란 스럽다. 즉, 테이블 이름이 바뀌었고 나는 그것을 피하고 싶다. 또한 - spring.jpa.hibernate.naming_strategy는 intelij에 따라 더 이상 사용되지 않지만, 올바르게 구성하는 방법을 찾을 수 없습니다.

application.properties에 다음과 같은 구성을 가지고 있습니다.

spring.jpa.hibernate.naming_strategy=org.hibernate.cfg.EJB3NamingStrategy
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5Dialect
spring.jpa.properties.hibernate.enable_lazy_load_no_trans=true
spring.jpa.properties.hibernate.current_session_context_class=thread

첫 번째 것은 더 이상 사용되지 않는 것으로 표시됩니다.

이제 엔티티가 있습니다.

@Entity
@Table(name = "usaUploadTable", schema = "usertable201", catalog = "")
public class UsaUploadTable {
    ....
}

테이블 이름은 @Table (name = "") usaUploadTable과 같습니다.

이제 신청서를 실행하면

올바른 것입니다 - 그것은 최대 절전 모드가 변경되는 것과 같은 이름이 아닙니다.

최대 절전 모드에서 테이블 이름을 올바르게 사용하려면 어떻게해야합니까?

편집하다:

나는 또한 시도했다.

DefaultNamingStrategy
ImprovedNamingStrategy

그들 모두가 그것을 바꾼다.

버전 :

spring-boot-1.4.0.RELEASE
hibernate 5.1
javax-transaction-api 1.2
hibernate-validator 5.2.4
javassist 3.20

해결법

  1. ==============================

    1.

    spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
    

    그것은 나를 위해 일했다. 여기에 내가 사용하는 버전이 있습니다 :

    Spring Boot (v1.4.2.RELEASE)
    Hibernate Core {5.0.11.Final}
    
  2. ==============================

    2.문제는 spring-boot-1.4에 있습니다. 속성 (또는 무엇이든)을 변경 한 것처럼 보입니다. ImprovedNamingStrategy는 더 이상 Hibernate 5에서 작동하지 않지만 여전히 올바르게 해석되지 않았습니다. 그래서 밑줄 메서드를 사용하지 않고 새로 도입 된 클래스 인 SpringPhysicalNamingStrategy를 확장하기 위해 코드를 약간 변경했습니다.

    문제는 spring-boot-1.4에 있습니다. 속성 (또는 무엇이든)을 변경 한 것처럼 보입니다. ImprovedNamingStrategy는 더 이상 Hibernate 5에서 작동하지 않지만 여전히 올바르게 해석되지 않았습니다. 그래서 밑줄 메서드를 사용하지 않고 새로 도입 된 클래스 인 SpringPhysicalNamingStrategy를 확장하기 위해 코드를 약간 변경했습니다.

    package com.foo;
    
    import org.hibernate.boot.model.naming.Identifier;
    import org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl;
    import org.hibernate.engine.jdbc.env.spi.JdbcEnvironment;
    
    import java.io.Serializable;
    import java.util.Locale;
    
    
    public class RealNamingStrategyImpl extends org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy implements Serializable {
    
        public static final PhysicalNamingStrategyImpl INSTANCE = new PhysicalNamingStrategyImpl();
    
        @Override
        public Identifier toPhysicalTableName(Identifier name, JdbcEnvironment context) {
            return new Identifier(name.getText(), name.isQuoted());
        }
    
        @Override
        public Identifier toPhysicalColumnName(Identifier name, JdbcEnvironment context) {
            return new Identifier(name.getText(), name.isQuoted());
        }
    
    }
    

    그리고 application.properties에서 비추천 라인을 다음으로 변경했습니다.

    spring.jpa.properties.hibernate.physical_naming_strategy=<package>.RealNamingStrategyImpl
    

    이제 엔티티 파일에서 테이블과 컬럼 이름을 정확하게 사용합니다.

  3. ==============================

    3.PostgreSQL 및 Spring 부트 1.5.2에서 대문자를 사용하려는 경우

    PostgreSQL 및 Spring 부트 1.5.2에서 대문자를 사용하려는 경우

    public class CustomDatabaseIdentifierNamingStrategy extends org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy implements Serializable {
    
        public static final long serialVersionUID = 1L;
        public static final CustomDatabaseIdentifierNamingStrategy INSTANCE = new CustomDatabaseIdentifierNamingStrategy();
    
        @Override
        public Identifier toPhysicalTableName(Identifier name, JdbcEnvironment context) {
            return new Identifier(name.getText().toUpperCase(), true);
        }
    
        @Override
        public Identifier toPhysicalColumnName(Identifier name, JdbcEnvironment context) {
            return new Identifier(name.getText().toUpperCase(), true);
        }
    
    }
    
  4. ==============================

    4.봄 부팅 2.0.0 및 최대 절전 모드 5

    봄 부팅 2.0.0 및 최대 절전 모드 5

        public class MySqlNamingStrategyImpl extends org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy implements Serializable {
    
    protected boolean isCaseInsensitive(JdbcEnvironment jdbcEnvironment) {
        return false;
    }
    

    }

  5. from https://stackoverflow.com/questions/39162976/hibernate-naming-strategy-changing-table-names by cc-by-sa and MIT license