阅读使用Hibernate
问题描述:
我有在找出什么是这里的问题大伤脑筋从Oracle CLOB ..阅读使用Hibernate
我从会话工厂一个会话,然后得到CLOB出持续性的对象。当涉及到clob.getCharcterStream()或getAsciiStream()时,它会抛出异常 - 关闭连接。
有人可以帮助我这个。
代码:
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)
答
这样做的原因错误是你的实体连接的会话现已结束。
尝试db connection with autocommit turned off(hibernate.connection.autocommit
)或者您需要一个打开的事务。
答
是否有一个特定的原因,你需要它是一个Clob?看看示例代码,它看起来像你把它放到一个字符串中,休眠支持将Clobs放入String
,char[]
和Clob
。这应该解决这个问题。
如果要求是只有ASCII字符的字符串中,你总是可以这样做:
String ascii = new String(oldString.getBytes("ASCII"),"ASCII");
警告:如果更改使用String
你可能会碰到this bug,但它仍然是值得一试。
答
你可以尝试添加系统属性hibernate.jdbc.use_streams_for_binary在= TRUE(这个固定为我关闭的连接错误)
关闭自动提交不起作用AYUSH ..和一个开放的交易,我插session.beginTransaction()紧跟在Hibernate.initialize()语句后面,也没有解决.. – JSixface 2011-02-07 18:04:15
是哪个oracle数据库呢? oracle 9? – ayush 2011-02-07 18:20:39