Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Entity Class Table & Column Name 이 따옴표(ex. "\"TableName\"", "\"columnName\"")로 묶여있는 건에 대하여 #1

Open
Lim-Changi opened this issue Mar 25, 2024 · 3 comments

Comments

@Lim-Changi
Copy link
Member

  • PostgresDB 는 lowercase table 과 column 을 권장한다
    • 현재 공홈 DB 는 모두 camelCase 기반이다.........
  • 대문자를 쓰기 위해서는 SQL Query 상에서 " " 를 붙여 명시해야 한다
    • 즉, hibernate 설정을 변경하여 대문자가 포함된 쿼리를 날려도, 따옴표로 묶여있지 않다면 postgres driver 가 내부적으로 다시 소문자로 변경하게 되어, 정상적으로 쿼리가 작동하지 않는다
  • 따라서 이러한 불상사를 방지하기 위해, 모든 프로퍼티를 따옴표로 묶어주었다
  • 이 방식을 유지하던가, DB 테이블 및 컬럼명을 전부 변경하는 대규모 리팩토링이 필요하다ㅠ
@softmoca
Copy link
Member

softmoca commented Oct 1, 2024

좋은 이슈 남겨 주셔서 감사합니다 !
흠.. Nest서버 코드에는 따옴표 같은 전처리를 확인하지 못했는데 혹시 Nest 코드쪽에도 따옴표와 같은 전처리를 해두신게 있을까요 ?!

@softmoca
Copy link
Member

softmoca commented Oct 1, 2024

JPA 기능 중 해당 이슈 해결해 줄만한 기능이 있을꺼 같긴한데..흠
제가 project 모듈 관련 API 마이그레이션 진행하며 하나씩 직접 테스트해보고 정리하고 다시 연락드리겠습니다 !!

첫번쨰 방법으로, 아래의 현재 hibernate 설정에 옵션 수정 및 추가.

spring:
  jpa:
    hibernate:
      naming:
        physical-strategy: org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
spring:
  jpa:
    hibernate:
      naming:
        physical-strategy: org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy
        implicit-strategy: org.springframework.boot.orm.jpa.hibernate.SpringImplicitNamingStrategy

위와 같은 옵션을 추가해보기

두 번째 방법으로, JPA에서 테이블 및 컬럼 이름 매핑
JPA에서는 @table@column 어노테이션을 사용해 PostgreSQL에 맞는 이름을 명시적으로 매핑가능. 이렇게 하면 엔티티 클래스의 필드가 카멜케이스여도, 실제 데이터베이스에서는 소문자로 자동 매핑.
즉, 코딩은 가독성이 좋은 카멜케이스로 진행하되, DB에는 소문자로 테이블과 컬럼들이 전달됨.

@Entity
@Table(name = "my_table")  // 소문자로 명시적으로 매핑
public class MyEntity {
    
    @Column(name = "my_column")  // 소문자로 명시적으로 매핑
    private String myColumn;
}

@Lim-Changi
Copy link
Member Author

Nest 에서는 TypeORM 이 모듈 내부에서 PostgresDB 를 활용할 떄, 매핑처리를 해줘서 따로 추가 작업을 하지 않아도 되었었습니다!

지금은 기간이 꽤 지나서 정확히 기억은 안나지만ㅠ 첫번째 방법은 제가 시도 해봤던 것 같은데, 잘 해결이 되지 않았던 것으로 기억합니다

두번째 방법은 제가 시도를 안해봤던 것 같은데, 현재 DB 테이블 네이밍이 UpperCamelCase 여서,
name 란에 UpperCamelCase 도 정상적으로 매핑된다면 너무 좋은 방법 같습니다!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants