JSON 파일을 BLOB으로 넣자고 했었는데
클래스를 하나 더만들어서 객체 직렬화 시켜놨더라~
그래서 JSON으로 바꿔서 디비에 BLOB으로 저장하는 방식으로 바꾸는 중에 느낀 점
1. JSON을 저장하는 방법
- Varchar2에 저장한다. 4000자가 넘지 않는 경우
- VARCHAR2(32767)을 사용하라는데 이건 내 버전에서 안되는 방법인걸로 판단됨. 12C 공식문서니까.
- 넘는 경우 BLOB이나 CLOB에 넣는다.
2. 문자열을 바이너리로 캐스팅하는 함수는 2천자 글자 제한이 있다.
- UTL_RAW.CAST_TO_RAW
- UTL_RAW.CAST_TO_VARCHAR2
- 뜨는 버그는 ORA-06502, 그전에 문자열을 BLOB에 그대로 쓰니 뜨는 버그는 ORA-01465
- 아래 링크중에서 보면 CLOB가 있는데 BLOB을 사용하는 이유도 설명되있는데 읽어보면 된다.
- 사용한 방법은, JSON 파싱한 문자열을 Binary로 바꾸고 쿼리에 넣는다.
3. JSON.Net에는 JsonIgnore 어트리뷰트가 있다.
- 가리고싶은 속성이 있는데 어떻게하지 하다가 보니 속성 위에 [JsonIgnore] 를 붙이면 됐다.
- 가리고 싶은 이유는 순환참조때문
4. 부모 클래스에 JsonIgnore를 했는데 동작하지 않는다.
- 위쪽 아이템클래스에 BackupItem이 있어서 JsonIgnore를 했는데 동작하지 않는다.
- 단순히 부모 클래스여서 안되는건지, 다른 어노테이션 때문인지는 불확실하다.
참고 링크
- https://blogs.oracle.com/jsondb/storing-json-in-blob-columns
- https://www.newtonsoft.com/json/help/html/PropertyJsonIgnore.htm
- https://blog.aliencube.org/ko/2015/03/24/tips-for-json-net-when-serialising-objects/
- 이 글은 나랑 같은 질문 상속받은 속성에 JsonIgnore가 동작안한다
https://stackoverflow.com/questions/37545629/use-jsonignore-on-certain-inherited-properties
'백엔드 > 데이터베이스' 카테고리의 다른 글
타입 (0) | 2020.12.05 |
---|---|
IBatis Inline Parameter (0) | 2019.05.10 |
오라클 유저에 테이블 다 날리기 (0) | 2019.04.16 |
DB 테이블 값 복사할때는 INSERT-SELECT (0) | 2019.01.15 |
make password not expire (0) | 2018.11.01 |
댓글