겸쨔

[jpa] entity camel case to snake case 변환 본문

spring/jpa

[jpa] entity camel case to snake case 변환

겸쨔 2024. 12. 31. 01:16
반응형

안녕하세요.

저 예전에 했을 때는 아래처럼만 해도 스네이크 케이스로 잘 변환 됐던거 같은데,

다시 공부 하려고 해보니까 잘 안 되더라구요.

physical-strategy: org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl

 

그새 뭐가 바꼈나봐요.

그래서 저는 PhysicalNamingStrategy를 구현하는 Strategy 클래스를 하나 만들어줬어요.

 

package org.hikinonymous.back.core.strategy;

import org.hibernate.boot.model.naming.Identifier;
import org.hibernate.boot.model.naming.PhysicalNamingStrategy;
import org.hibernate.engine.jdbc.env.spi.JdbcEnvironment;

public class SnakeCaseNamingStrategy implements PhysicalNamingStrategy {

    @Override
    public Identifier toPhysicalCatalogName(Identifier name, JdbcEnvironment context) {
        return convertToUpperSnakeCase(name);
    }

    @Override
    public Identifier toPhysicalSchemaName(Identifier name, JdbcEnvironment context) {
        return convertToUpperSnakeCase(name);
    }

    @Override
    public Identifier toPhysicalTableName(Identifier name, JdbcEnvironment context) {
        return convertToUpperSnakeCase(name);
    }

    @Override
    public Identifier toPhysicalSequenceName(Identifier name, JdbcEnvironment context) {
        return convertToUpperSnakeCase(name);
    }

    @Override
    public Identifier toPhysicalColumnName(Identifier name, JdbcEnvironment context) {
        return convertToUpperSnakeCase(name);
    }

    private Identifier convertToUpperSnakeCase(Identifier name) {
        if (name == null || name.getText().isEmpty()) {
            return name;
        }

        // CamelCase -> Snake_Case
        String snakeCase = name.getText().replaceAll("([a-z])([A-Z])", "$1_$2").toUpperCase();
        return Identifier.toIdentifier(snakeCase);
    }

}

 

위처럼 만들고나서 해당 클래스 경로 넣어주면 돼요 ~

physical-strategy: org.strategy.SnakeCaseNamingStrategy
반응형