현재 Spring(v3.0.4),Hibernate(v3.6)를 주로 이용하여 시스템을 개발하고 있습니다.
올해 처음으로 Java를 사용하는 데다가 Spring을 기반으로 개발하다 보니
정말 어려웠습니다.
왠만 한거 구글링하고 토비 Spring 책을 보고 개발을 했는데요.
잘 안되는 부분이 있어 이렇게 글 올립니다.
위 제목으로 하시겠지만 Hibernate 사용하여 오라클에 CLOB,BLOB 타입으로
데이터를 관리해야 할 부분이 있는데요. 잘 안되네요.
여러 전문가 분들의 조언이 필요합니다.
기본적인 CRUD 함수들은 org.springframework.orm.hibernate3.HibernateTemplate 의 함
수들 사용했습니다.
BLOB,CLOB로 하지 말고 다른 방법을 찾아볼려고 했으나
지금은 이렇게 처리 할 수 밖에 없을 것 같습니다.
전문가 분들의 해결 방법이나 아니면 새로운 다른 방법도 좋습니다.
JPA나 하이버네이트로 BLOB이나 CLOB을 다루는 방법은 인터넷에 많이 나와있
으니 보시면 쉽게 하실 수 있을 거구요.
http://stevedaskam.wordpress.com/2011/03/28/using-jpa-to-insert-and-retrieve-blobs-and-clobs/
다만 오라클 JDBC 드라이버가 종종 이상하게 작동하는 일이 있어 그에 따라
우회할 필요가 있습니다. 최신 버전이나 이전 버전의 드라이버로 바꾼다거나
CLOB이 아닌 일반 VARCHAR2 컬럼으로 다룬다거나...
만약 무슨 문제가 있는 거라면 어떤 문제인지 알려주세요.
배치 업데이트 문제라거나 CLOB에 NULL이 안 들어가는 문제라거나 여러가지
문제가 생기긴 합니다.
그리고 알려주신 방법은 제가 아직 찾지 못했습니다. 한 번해 봐야 할 것 같은데요.
알려주신 url로 들어가 보니 clob은 string으로 type mapping한 것 같고
blob는 object로 type mapping 한 것 같네요. 그리고 @Lob anotation을 사용했네요. 그런데
BlobDao라는 클래스는 어떻게 구현되어 있는지 알 수가 없네요. 제가 잘 몰라서 그러니 좀 더 알려주세요.
그리고 Blob에는 이미지를 저장할려고 하고요. Clob는 엑셀파일을 저장할려고 하는데요.
엑셀 파일을 저장하고 검색했을때 결과가 리턴되는 데는 문제가 없나요? 엑셀파일을 clob에 저장하는게 맞나요?
On 11월7일, 오후2시46분, Sungchul Park <gyu...@gmail.com> wrote:
> 특별히 어떤 문제가 있는 건가요? 아니면 BLOB이나 CLOB을 다루는 방법을 모
> 르시는 건가요?
>
> JPA나 하이버네이트로 BLOB이나 CLOB을 다루는 방법은 인터넷에 많이 나와있
> 으니 보시면 쉽게 하실 수 있을 거구요.
>
> http://stevedaskam.wordpress.com/2011/03/28/using-jpa-to-insert-and-r...
>
> 다만 오라클 JDBC 드라이버가 종종 이상하게 작동하는 일이 있어 그에 따라
> 우회할 필요가 있습니다. 최신 버전이나 이전 버전의 드라이버로 바꾼다거나
> CLOB이 아닌 일반 VARCHAR2 컬럼으로 다룬다거나...
>
> 만약 무슨 문제가 있는 거라면 어떤 문제인지 알려주세요.
>
> 배치 업데이트 문제라거나 CLOB에 NULL이 안 들어가는 문제라거나 여러가지
> 문제가 생기긴 합니다.
>
>
>
> > 추가로 오라클 DB의 테이블 속성 타입이 BLOB,CLOB입니다.
> > 이 타입으로 된 테이블에 데이터를 hibernate를 이용하여 삽입,삭제,갱신과 같은 기능을 처리해야 합니다.
>
> > BLOB,CLOB로 하지 말고 다른 방법을 찾아볼려고 했으나
> > 지금은 이렇게 처리 할 수 밖에 없을 것 같습니다.
>
> > 전문가 분들의 해결 방법이나 아니면 새로운 다른 방법도 좋습니다.
>
> > On 11월7일, 오후1시36분, Goodguy<outofwo...@naver.com> wrote:
> >> 안녕하세요.
> >> 매번 눈팅만 하다가 이렇게 글 올립니다.
>
> >> 현재 Spring(v3.0.4),Hibernate(v3.6)를 주로 이용하여 시스템을 개발하고 있습니다.
> >> 올해 처음으로 Java를 사용하는 데다가 Spring을 기반으로 개발하다 보니
> >> 정말 어려웠습니다.
> >> 왠만 한거 구글링하고 토비 Spring 책을 보고 개발을 했는데요.
> >> 잘 안되는 부분이 있어 이렇게 글 올립니다.
>
> >> 위 제목으로 하시겠지만 Hibernate 사용하여 오라클에 CLOB,BLOB 타입으로
> >> 데이터를 관리해야 할 부분이 있는데요. 잘 안되네요.
> >> 여러 전문가 분들의 조언이 필요합니다.
> >> 기본적인 CRUD 함수들은 org.springframework.orm.hibernate3.HibernateTemplate 의 함
> >> 수들 사용했습니다.- 원본 텍스트 숨기기 -
>
> - 원본 텍스트 보기 -
LobHelper lobHelper =
sessionFactory.getCurrentSession().getLobHelper();
File inputfile = new File("E:\\nhnsvc.jpg");
FileInputStream fInSteam = new FileInputStream(inputfile);
BufferedInputStream bInputStream = new
BufferedInputStream(fInSteam);
ByteArrayOutputStream bOutputStream = new
ByteArrayOutputStream();
int nextByte;
while (( nextByte = bInputStream.read() ) != - 1)
{
bOutputStream.write(nextByte);
}
// Bob the builder builds a blob.
Blob bReport =
lobHelper.createBlob(bOutputStream.toByteArray());
systemconfiguration.setReportform1(bReport);
super.getHibernateTemplate().save(systemconfiguration);
그런데 아래와 같은 에러 발생하는데요. 혹시 아시는 분 있으신가요?
제가 검색을 잘못해서 그런지 모르겠지만 구글링해도 검색이 안되네요. hibernate 버전은 v3.6.8, Spring 버전
은 v3.0.4 입니다.
org.springframework.orm.hibernate3.HibernateSystemException: Unable to
access blob stream; nested exception is
org.hibernate.HibernateException: Unable to access blob stream
at
org.springframework.orm.hibernate3.SessionFactoryUtils.convertHibernateAccessException(SessionFactoryUtils.java:
679)
at
org.springframework.orm.hibernate3.SpringSessionSynchronization.translateException(SpringSessionSynchronization.java:
160)
at
org.springframework.orm.hibernate3.SpringSessionSynchronization.beforeCommit(SpringSessionSynchronization.java:
148)
at org.springframework.transaction.support.TransactionSync
> > > - 원본 텍스트 보기 -- 원본 텍스트 숨기기 -
LobHelper lobHelper =
sessionFactory.getCurrentSession().getLobHelper();
Blob reportform1 = null;
Blob reportform2 = null;
if (isForm1 != null){
reportform1 = lobHelper.createBlob(isForm1 ,
isForm1.available());
systemconfiguration.setReportform1(reportform1);
}
if (isForm2 != null){
reportform2 = lobHelper.createBlob(isForm2 ,
isForm2.available());
systemconfiguration.setReportform2(reportform2);
}
super.getHibernateTemplate().save(systemconfiguration);
> org.springframework.orm.hibernate3.SessionFactoryUtils.convertHibernateAcce-ssException(SessionFactoryUtils.java:
> 679)
> at
> org.springframework.orm.hibernate3.SpringSessionSynchronization.translateEx-ception(SpringSessionSynchronization.java:
> 160)
> at
> org.springframework.orm.hibernate3.SpringSessionSynchronization.beforeCommi-t(SpringSessionSynchronization.java: