본문 바로가기
MySql

MySQL 최대 절전 모드 이름 지정 전략 변경 테이블 이름

by 베이스 공부 2020. 11. 2.
반응형

나는 최대 절전 모드 (버전 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과 같습니다.

이제 애플리케이션을 실행하면

테이블 'usertable201.usa_upload_table'이 존재하지 않습니다.

맞습니다-최대 절전 모드가 변경하는 것과 같은 이름이 아닙니다.

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

편집하다:

나는 또한 시도했다

DefaultNamingStrategy
ImprovedNamingStrategy

그들 모두가 그것을 바꿔

버전 :

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

 

해결 방법

 


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

이제 엔터티 파일에있는 그대로 테이블 및 열 이름을 사용합니다.

 

참조 페이지 https://stackoverflow.com/questions/39162976

 

 

반응형

댓글