반응형
저는 보통 테이블이나 컬럼명을 대문자로 사용하는데,
그럴 경우 엔티티에 아래와 같이 테이블이나 컬럼명을 지정해줘야합니다.
jpa 설정 시 아래와 같이 physical-strategy를 지정하여 사용하면,
자동으로 대문자로 변환하여 사용할 수 있도록 변경할 수 있습니다.
1
2
3
4
5
6
7
8
9
10
11
12
|
spring:
jpa:
database: mysql
database-platform: org.hibernate.dialect.MySQL8Dialect
open-in-view: false
show-sql: true
hibernate:
ddl-auto: none
format_sql: true
naming:
implicit-strategy: org.springframework.boot.orm.jpa.hibernate.SpringImplicitNamingStrategy
physical-strategy: com.halfjang.food.mapapi.common.config.NamingStrategy
|
기존의 PhysicalNamingStrategy를 아래와 같이 구현하여
원하는 영역만 변경할 수 있는데,
저는 테이블명과 컬럼명만 변경하여 사용하고 있습니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
|
package com.halfjang.food.mapapi.common.config;
import org.hibernate.boot.model.naming.Identifier;
import org.hibernate.boot.model.naming.PhysicalNamingStrategy;
import org.hibernate.engine.jdbc.env.spi.JdbcEnvironment;
public class NamingStrategy implements PhysicalNamingStrategy {
@Override
public Identifier toPhysicalColumnName(Identifier name, JdbcEnvironment jdbcEnvironment) {
return convert(name);
}
@Override
public Identifier toPhysicalTableName(Identifier name, JdbcEnvironment jdbcEnvironment) {
return convert(name);
}
@Override
public Identifier toPhysicalCatalogName(Identifier name, JdbcEnvironment jdbcEnvironment) {
return name;
}
@Override
public Identifier toPhysicalSchemaName(Identifier name, JdbcEnvironment jdbcEnvironment) {
return name;
}
@Override
public Identifier toPhysicalSequenceName(Identifier name, JdbcEnvironment jdbcEnvironment) {
return name;
}
private Identifier convert(Identifier name) {
if (name == null) {
return null;
}
StringBuilder sb = new StringBuilder(name.getText());
for (int i = 1; i < sb.length() - 1; i++) {
if (Character.isLowerCase(sb.charAt(i - 1)) && Character.isUpperCase(sb.charAt(i))
&& Character.isLowerCase(sb.charAt(i + 1))) {
sb.insert(i++, '_');
}
}
return new Identifier(sb.toString().toUpperCase(), name.isQuoted());
}
}
|
설정 파일은 애플리케이션 로딩 시 싱글스레드로 동작하여 StringBuffer가 아닌 StringBuilder를 사용했습니다.
반응형
'- Spring' 카테고리의 다른 글
private method Test (0) | 2021.06.09 |
---|---|
Spring Cloud API Gateway (0) | 2021.04.30 |
[lombok] Constructor (0) | 2020.10.25 |
[ERROR] Error creating bean with name 'repositoryController' / At least one JPA metamodel must be present! (2) | 2020.10.16 |
[Spring Hateoas1.2] ModelAssembler, ModelProcessor (0) | 2020.09.02 |