본문 바로가기
개발/JPA

JPA + Postgres 사용시 주의할 @Lob

by 설이주인 2022. 11. 15.

프로젝트로 Entity 작성시 평소와 같이 @Lob를 사용하고 있었다.

 

 

Postman을 통해서 등록 메소드를 테스트 하는 상황에서 문제가 발생했다.

 

 

 

title, contents의 값이 의도와 다르게

 

 

contents에 이상한 숫자가 들어간 상황이다....

 

왜지...? 왜지...?

처음에는 request model에 담기면서 값이 달라지나? 라고 생각했지만 아닌것을 확인

 

자세히 기억해보면 그동안 JPA를 사용하면서 이용했던 DB는 h2 mysql 정도라는 것을 기억해냈다.

 

지금 Postgres를 사용하면서 이런 문제가 생긴것을 생각하고 알아봤다.

 

결론은 @Lob말고 @Column(nullable = false, columnDefinition="TEXT") 으로 변경하면 TEXT가 들어가는 것을 확인할 수 있다.

 


해결까지는 좋았다 그럼 코드에서 문제가 발생한것이 아니라면 저 contents에서의 숫자는 뭐지? 

 

우선 contents 컬럼에 들어간 숫자는 OID(Object Identifier Types)라고 한다.

postgresql은 오브젝트를 따로 oid로 관리하며 아래의 명령어로 확인할 수 있다.

 

음... 너무... 너무 불편한데... 이러면 쿼리문이 길어지거나... 디비를 두번 조회하는게 방법인건가...?

 

텍스트 보다는 숫자가 검색에 용의하다는 점은 알지만.. 이건 좀 아닌거 같다 다음 시간 날때 더 알아보는 방향으로 해야겠다

 

 

https://kdhyo98.tistory.com/35

 

[PostgreSQL] CLOB타입과 TEXT타입 - JPA

🤸‍♂️서론 예전에 @Lob 에러 관련 글을 적은 적이 있다. 당시에는 postgresql에서 @Lob을 아예 사용할 수 없는 줄 알고 @Column(columnDefinition="TEXT") 사용을 무조건 해야 한다고 알고 있었지만 최근에

kdhyo98.tistory.com

https://blog.naver.com/anjae83/221525937033

 

[PostgreSQL] oid 를 원하는 값으로 변환하기

PostgreSQL 에서는 oid (Object Identifier Types) 라는 식별자로 모든 object 를 관리하고 있다. ...

blog.naver.com