Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用hibernate从oracle读取clob_Java_Oracle_Hibernate_Clob - Fatal编程技术网

Java 使用hibernate从oracle读取clob

Java 使用hibernate从oracle读取clob,java,oracle,hibernate,clob,Java,Oracle,Hibernate,Clob,我很头痛,想知道这里出了什么问题 我从会话工厂获取会话,然后从持久对象中获取clob。当涉及clob.getCharacterStream()或getAsciStream()时,它会抛出一个异常关闭的连接 有人能帮我吗 代码: Session session = Dao.getSession(connId); Package pack = (Package) session.load(Package.class, packId); Hibernate.initialize

我很头痛,想知道这里出了什么问题

我从会话工厂获取会话,然后从持久对象中获取clob。当涉及clob.getCharacterStream()或getAsciStream()时,它会抛出一个异常关闭的连接

有人能帮我吗

代码:

    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)

此错误的原因是实体所连接的会话现在已关闭


请尝试
(hibernate.connection.autocommit
),或者您需要一个打开的事务

您需要它成为Clob的具体原因是什么?查看示例代码,它看起来像是将其放入字符串中,Hibernate支持将Clob放入
String
char[]
Clob
。这应该可以解决问题

如果要求字符串中仅包含ASCII字符,则始终可以执行以下操作:

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

警告:如果更改为使用
String
,您可能会遇到,但是仍然值得一试。

您可以尝试添加系统属性hibernate.jdbc。使用\u streams\u for \u binary=true(这为我修复了关闭的连接错误)

关闭自动提交不起作用。。对于打开的事务,我在Hibernate.initialize()语句之后插入了session.beginTransaction()。。那也没用..它是哪一个oracle db?甲骨文9号?现在解决了。。我在try块中插入了一个session.beginTransaction(),它现在可以工作了。。但我不明白为什么它现在起作用而不是更早。。可能是一些范围问题,我希望..我在CLOB中存储了一些HTML和XML文件。。XML文件的最大大小可能为2MB。这就是我使用clob的原因。。