Entity Naming Error

카레·2023년 3월 5일
0

회고

목록 보기
2/3
post-thumbnail

Spring Batch를 프로젝트에 적용을 하면서 Batch DB와 Entity DB를 분할을 하려던 중 Entity Naming 에 관련하여 문제가 발생하였다 😂

Not a managed type: class Entity ...

처음발생한 문제는 @Entity를 읽지 못하는 에러였다.
Entity annotation을 달지 않아서 발생한 문제인줄 알고 삽질을..하였지만 ㅠㅠ 모든 Entity에 annotation이 모두 붙여져 있다는 것을 확인하였다

도대체 뭐가 문제인거야ㅜㅜ

이 에러를 잡으려다가.. 새로운 에러를 만나게 되었다 🤯

2023-03-03 06:17:50.040  WARN 47525 --- [  restartedMain] o.h.t.s.i.ExceptionHandlerLoggedImpl     : GenerationTarget encountered exception accepting command : Error executing DDL "
  create table DETAIL_EXCHANGE (
     id bigint not null auto_increment,
      aud varchar(255),
      cad varchar(255),
      chf varchar(255),
      cny varchar(255),
      eur varchar(255),
      gbp varchar(255),
      hkd varchar(255),
      jpy varchar(255),
      nzd varchar(255),
      usd varchar(255),
      user_id bigint,
      primary key (id)
  ) type=MyISAM" via JDBC Statement

갑자기 처음 보는 "type=MyISAM" 이 나왔고, 알아보니 table type 이 "MyISAM"으로 설정이 되어 발생하는 에러였다!! 난 아무것도 설정하지 않았는데 ㅠㅠ 왜 자동으로 설정되는거냐구..

찾아보니 application.properties 에 아래와 같은 설정을 넣어 변경하였다.

 spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MariaDBDialect

그 후 DB를 분리를 하려고 시도를 했지만 ㅠㅠ 결국 분리 성공을 하지 못하고 1개의 DB만 사용하기로 했다..
당연히 1개의 DB만 사용하니 별다른 문제들이 발생 안하고 잘 실행 될 줄 알았지만 ㅠㅠ 역시나 또 다른 에러가 발생하였다 😱

more than one table found in namespace...

테이블 이름이 중복한다는 에러였다
분명 hibernate 도 업데이트로 되어 있었는데, 원래 존재하던 table이 새로 생성이 되었다!!
같은 테이블로 인식되어야 할 Entity가 아래와 같은 이름으로 변경되어 새로 추가가 되었다.

예)

user_weather // 기존에 있었던 table
USER_WEATHER // 새로 생성된 table

대소문자를 항상 같은 문자로 인식하던 것이 대문자로 생성이 되었다!!!
구글링으로 1차 해결..ㅜㅜ
Maria db variable 설정이 다른 문자로 인식하도록 설정이 되어있는지 확인해본결과

show variables like 'lower_case_table_names';

value 값이 '1' 로 설정되어 있는 것을 확인하였다.
RDS 들어가서 1 -> 0 으로 수정하였다
수정 법 : https://yeonyeon.tistory.com/68

수정 후 다시 실행 하였지만, 이번에는 이름이 snake_case 로 인식되어야 할 테이블이 camelCase로 새로 생성 되는 것을 확인하였다.

예)

user_weather // 기존에 있던 table
userWeahter // 새로 생성된 table

이때 진심 포기하고 싶었다ㅠㅠ

열심히 찾아본 결과ㅠㅠ 처음 근본 원인이.. hibernate naming 문제로 인해 발생한 에러였던 것을 확인하였다 😡 (그동안 삽질.. 열심히 하하핳)

처음 프로젝트 생성시 application.yml 에 hibernate naming 을 아래와 같이 설정해 두었다.

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

이렇게 설정 할 경우, 원래 snake_case 로 설정될 이름들이 모두 camelCase로 설정된다 ㅠㅠ
snake_case로 변경하기 위해 다시 naming을 설정해 주었다

spring:
	jpa:
    	hibernate:
      		naming:
        		physical-strategy: org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy

변경을 해주니, 에러가 나지 않고 잘 작동하는 것을 확인하였다ㅠㅠ

JPA.. 이해하고 쓰자 ㅠㅠ


참조
https://rebeccajo.tistory.com/14
https://mollangpiu.tistory.com/259
https://velog.io/@rladuswl/%ED%85%8C%EC%9D%B4%EB%B8%94-%EC%83%9D%EC%84%B1%ED%95%98%EB%8A%94-%EA%B3%BC%EC%A0%95-%EB%9C%AF%EC%96%B4%EB%B3%B4%EA%B8%B0

0개의 댓글