2011-02-07 7 views
0

休止状態を使用してOracleからCLOBを読み込みます。 clob.getCharcterStream()またはgetAsciiStream()の場合は、Closed connectionという例外がスローされます。</p> <p>私はセッションファクトリからセッションを取得し、永続的なオブジェクトのうち、CLOBを取得..私はここでの問題が何であるかを見つけることに大きな頭痛の種を持っています

誰かが私に助けてくれますか?

コード:

Session session = Dao.getSession(connId); 
    Package pack = (Package) session.load(Package.class, packId); 
    Hibernate.initialize(pack); 

    Clob reportClob = pack.getExpReportFile(); 

    String result = null; 
    InputStream stream = null; 
    try 
    { 
     System.out.println(session.isConnected() + " " + session.isOpen()); 
     stream = reportClob.getAsciiStream(); 
     result = IOUtils.toString(stream); 

    } 
    catch (SQLException e) 
    { 
     e.printStackTrace(); 
    } 
    return result; 

例外:

true true 
java.sql.SQLException: Closed Connection 
at oracle.sql.CLOB.getDBAccess(CLOB.java:1389) 
at oracle.sql.CLOB.getAsciiStream(CLOB.java:330) 
at org.hibernate.lob.SerializableClob.getAsciiStream(SerializableClob.java:68) 
at com.server.WebServiceImpl.fetchPackageReport(WebServiceImpl.java:2070) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
at java.lang.reflect.Method.invoke(Unknown Source) 
at com.google.gwt.user.server.rpc.RPC.invokeAndEncodeResponse(RPC.java:562) 
at com.google.gwt.user.server.rpc.RemoteServiceServlet.processCall(RemoteServiceServlet.java:188) 
at com.google.gwt.user.server.rpc.RemoteServiceServlet.processPost(RemoteServiceServlet.java:224) 
at com.google.gwt.user.server.rpc.AbstractRemoteServiceServlet.doPost(AbstractRemoteServiceServlet.java:62) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:637) 

答えて

2

このエラーの理由は、あなたのエンティティが接続されているセッションが終了しましたしていることです。

try db connection with autocommit turned off(hibernate.connection.autocommit)、またはオープントランザクションが必要です。

+0

(これは私のために閉じられた接続エラーを修正)、オープン・トランザクションのために、私は挿入真session.beginTransaction()Hibernate.initialize()ステートメントの直後..それも動きませんでした.. – JSixface

+0

oracle dbはそれですか?オラクル9? – ayush

+0

Oracleデータベース10g – JSixface

0

Clobである必要がある具体的な理由はありますか?サンプルコードを見ると、それを文字列に入れているように見え、HibernateはClobを,char[]Clobに入れることをサポートしています。これで問題は解決するはずです。

要件は文字列のみでASCII文字を持つことであるならば、あなたはいつものように何かを行うことができます。

String ascii = new String(oldString.getBytes("ASCII"),"ASCII"); 

警告:Stringを使用して変更する場合は、this bugに実行するかもしれないが、しかしそれはまだ価値があります試してみる。

+0

私はいくつかのHTMLとXMLファイルをCLOBに保存します。XMLファイルのサイズは最大2MBのサイズがあります。それが私がclobを使っている理由です。 – JSixface

0

あなたは、システムプロパティを追加してみてくださいhibernate.jdbc.use_streams_for_binaryを= ..アユシュ動作しない自動コミットをオフにする

関連する問題

 関連する問題