티스토리 뷰

반응형

 

 

 

 



 

 

MSSQLmariadbpostgresqloracle

 

 

DB쪽을 엄청 빠삭하게 아는건 아니지만

JPA 사용하다가 DB 마다의 구조적 차이점이 꽤 영향을 주는걸 알게 되면서 간단하게 남겨본다.

 

 

보통은 데이터베이스 - 스키마 - 테이블 구조로 되어있고

데이터베이스 설정을 하고 엔티티에서 테이블 이름만 지정해놓고 사용하면

기본 디폴트 스키마를 기준으로 테이블 조회를 하게 되는데

다른 데이터베이스나 스키마를 다중 참조해야 할 때,

 

이 부분이 DB마다의 계층구조로 약간 상이해지는걸 발견했다.

 

모든 DB의 구조를 잘 안다면 큰 문제가 없었겠지만,

몇가지 DB만 쭉 사용하다가 어쩌다가 다른 DB를 쓸때 동일하게 설정했는데

table이 없다는 오류를 보고서 왜!!! 를 시전한것 같다.

 

 

보통 oracle 은 하나의 인스턴스에 계정별 스키마로 접근하게 되어있어

@Entity
@Table(name = "sales", schema = "jpa")

 

이렇게 스키마로 구분해서 다른 스키마 테이블을 맵핑했었다.

 

 

문제를 야기한 녀석들은 mysql(mariadb) 와 mssql 이었다.

 

mssql 은 데이터베이스를 생성하면 기본 디폴트 스키마로 dbo 가 생성되고

mysql 이나 mariadb 는 3계층 구조이며,

데이터베이스와 스키마가 동등한 것 처럼 보인다. (툴에서 봐도 스키마의 존재는 보이지 않음)

 

 

mariadb (mysql)  같은 경우는 schema 를 사용하면 테이블을 찾지를 못했다.

그래서 catalog 로 썼더니 그제서야 제대로 인식했고

(이 부분은 NO_CATALOG , NO_SCHEMA 옵션 설정에 따라 동작방식의 차이가 있으리라 본다.)

@Entity
@Table(name = "board", catalog = "jpa_test")

 

 

 

 

mssql 은 catalog와 schema 를 다 지정해줘야 인식했다.

디폴트 스키마여서 안적어 줘도 될 줄 알았는데 다중으로 바라볼때는 못잡는 것을 확인했다.

@Entity
@Table(name = "post", catalog = "jpa", schema = "dbo")

 

 

 

 

이러한 차이점이 발생한다는 것을 알게되면서

DB 계층 구조나 구축환경에 따라 상이해지게 될 꺼라 본다.

 

 



 

 

 

 

 

 

 

 

참고블로그
 

MySQL 환경 JPA 다중 스키마 사용하기

<br /><br />

junhyunny.github.io

 

반응형
댓글
반응형
최근에 올라온 글
«   2024/11   »
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
Total
Today
Yesterday