该帖已经被评为精华帖
|
|
---|---|
作者 | 正文 |
发表时间:2006-01-04
测了一下,用10G的驱动,在HBM.XML中直接定义为STRING类型,8I都可以直接写入了
爽!!! 后来又测了一下,只可写,不可读 郁闷 只能用以前的老办法处理了 |
|
返回顶楼 | |
发表时间:2006-01-18
报错代码如下:
我采用robbin写的读写Blog类型的方法,当第一次调用的时候可以,如果我刷新多次,就会出现这样的错误 我的配置是:oracle9i+hibernate2.1.6+class12.jar(驱动)+jboss4.1sp1 09:41:38,881 WARN [JDBCExceptionReporter] SQL Error: 1002, SQLState: 72000 09:41:38,881 ERROR [JDBCExceptionReporter] ORA-01002: 读取违反顺序 09:41:38,881 WARN [JDBCExceptionReporter] SQL Error: 1002, SQLState: 72000 09:41:38,881 ERROR [JDBCExceptionReporter] ORA-01002: 读取违反顺序 09:41:38,881 ERROR [JDBCExceptionReporter] could not load: [com.bachcenter.trip.pojo.OrderLog#4028889208db19cc0108db2c97920005] java.sql.SQLException: ORA-01002: 读取违反顺序 at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:180); at oracle.jdbc.ttc7.TTIoer.processError(TTIoer.java:208); at oracle.jdbc.ttc7.Oall7.receive(Oall7.java:543); at oracle.jdbc.ttc7.TTC7Protocol.doOall7(TTC7Protocol.java:1451); at oracle.jdbc.ttc7.TTC7Protocol.fetch(TTC7Protocol.java:943); at oracle.jdbc.driver.OracleStatement.doExecuteQuery(OracleStatement.java:2126); at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:2331); at oracle.jdbc.driver.OraclePreparedStatement.executeUpdate(OraclePreparedStatement.java:422); at oracle.jdbc.driver.OraclePreparedStatement.executeQuery(OraclePreparedStatement.java:366); at org.jboss.resource.adapter.jdbc.WrappedPreparedStatement.executeQuery(WrappedPreparedStatement.java:296); at net.sf.hibernate.impl.BatcherImpl.getResultSet(BatcherImpl.java:87); at net.sf.hibernate.loader.Loader.getResultSet(Loader.java:875); at net.sf.hibernate.loader.Loader.doQuery(Loader.java:269); at net.sf.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:133); at net.sf.hibernate.loader.Loader.loadEntity(Loader.java:911); at net.sf.hibernate.loader.Loader.loadEntity(Loader.java:931); at net.sf.hibernate.loader.SimpleEntityLoader.load(SimpleEntityLoader.java:58); at net.sf.hibernate.persister.EntityPersister.load(EntityPersister.java:419); at net.sf.hibernate.impl.SessionImpl.refresh(SessionImpl.java:2183); at com.chinabach.baksys.concreteface.implHotel.add(implHotel.java:281); at com.bachcenter.trip.action.sysbak.AddlogAction.execute(AddlogAction.java:46); at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:484); at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:274); at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482); at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:507); at javax.servlet.http.HttpServlet.service(HttpServlet.java:697); at javax.servlet.http.HttpServlet.service(HttpServlet.java:810); at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:237); at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157); at com.bachcenter.trip.TripFilter.doFilter(TripFilter.java:47); at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:186); at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157); at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:75); at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:186); at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157); at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:214); at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104); at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520); at org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:198); at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:152); at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104); at org.jboss.web.tomcat.security.CustomPrincipalValve.invoke(CustomPrincipalValve.java:66); at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:102); at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:150); at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:102); at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:54); at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:102); at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520); at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:137); at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104); at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:118); at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:102); at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520); at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109); at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104); at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520); at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:929); at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:160); at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:799); at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:705); at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:577); at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:683); at java.lang.Thread.run(Thread.java:595); 09:41:39,084 INFO [STDOUT] net.sf.hibernate.JDBCException: could not load: [com.bachcenter.trip.pojo.OrderLog#4028889208db19cc0108db2c97920005] at net.sf.hibernate.persister.EntityPersister.load(EntityPersister.java:422); at net.sf.hibernate.impl.SessionImpl.refresh(SessionImpl.java:2183); at com.chinabach.baksys.concreteface.implHotel.add(implHotel.java:281); at com.bachcenter.trip.action.sysbak.AddlogAction.execute(AddlogAction.java:46); at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:484); at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:274); at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482); at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:507); at javax.servlet.http.HttpServlet.service(HttpServlet.java:697); at javax.servlet.http.HttpServlet.service(HttpServlet.java:810); at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:237); at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157); at com.bachcenter.trip.TripFilter.doFilter(TripFilter.java:47); at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:186); at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157); at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:75); at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:186); at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157); at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:214); at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104); at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520); at org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:198); at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:152); at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104); at org.jboss.web.tomcat.security.CustomPrincipalValve.invoke(CustomPrincipalValve.java:66); at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:102); at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:150); at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:102); at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:54); at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:102); at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520); at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:137); at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104); at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:118); at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:102); at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520); at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109); at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104); at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520); at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:929); at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:160); at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:799); at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:705); at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:577); at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:683); at java.lang.Thread.run(Thread.java:595); Caused by: java.sql.SQLException: ORA-01002: 读取违反顺序 at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:180); at oracle.jdbc.ttc7.TTIoer.processError(TTIoer.java:208); at oracle.jdbc.ttc7.Oall7.receive(Oall7.java:543); at oracle.jdbc.ttc7.TTC7Protocol.doOall7(TTC7Protocol.java:1451); at oracle.jdbc.ttc7.TTC7Protocol.fetch(TTC7Protocol.java:943); at oracle.jdbc.driver.OracleStatement.doExecuteQuery(OracleStatement.java:2126); at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:2331); at oracle.jdbc.driver.OraclePreparedStatement.executeUpdate(OraclePreparedStatement.java:422); at oracle.jdbc.driver.OraclePreparedStatement.executeQuery(OraclePreparedStatement.java:366); at org.jboss.resource.adapter.jdbc.WrappedPreparedStatement.executeQuery(WrappedPreparedStatement.java:296); at net.sf.hibernate.impl.BatcherImpl.getResultSet(BatcherImpl.java:87); at net.sf.hibernate.loader.Loader.getResultSet(Loader.java:875); at net.sf.hibernate.loader.Loader.doQuery(Loader.java:269); at net.sf.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:133); at net.sf.hibernate.loader.Loader.loadEntity(Loader.java:911); at net.sf.hibernate.loader.Loader.loadEntity(Loader.java:931); at net.sf.hibernate.loader.SimpleEntityLoader.load(SimpleEntityLoader.java:58); at net.sf.hibernate.persister.EntityPersister.load(EntityPersister.java:419); ... 45 more |
|
返回顶楼 | |
发表时间:2006-01-18
如果能用spring的话处理大字段将很方便,当然在更新大字段时一定要用spring的事务处理进行更新操作
|
|
返回顶楼 | |
发表时间:2006-04-25
scud 写道 karna 写道 robbin 写道 blob在Oracle中就是一种很特殊的数据类型,操作方法就是不通用的,也没有办法通用。如果为了程序的跨数据库通用性考虑,就必须采用long型,而不能采用blob/clob
谁说没办法通用的,偶写的一个持久层,把blob映射为byte[],clob映射为char[],操作他们和操作其它数据库的大字段是一样的,把oracle的blob/clob移植到sybase的image/text,甚至access的OLE对象,不需要修改一行代码和配置 oracle9,oracle10倒是可以 你试过在8i上通用的吗 我很为此烦恼(替别人烦恼) 说得很过分哈!8i的现在很少了,基本都升级了! |
|
返回顶楼 | |
发表时间:2006-04-26
aflyer 写道 scud 写道 karna 写道 robbin 写道 blob在Oracle中就是一种很特殊的数据类型,操作方法就是不通用的,也没有办法通用。如果为了程序的跨数据库通用性考虑,就必须采用long型,而不能采用blob/clob
谁说没办法通用的,偶写的一个持久层,把blob映射为byte[],clob映射为char[],操作他们和操作其它数据库的大字段是一样的,把oracle的blob/clob移植到sybase的image/text,甚至access的OLE对象,不需要修改一行代码和配置 oracle9,oracle10倒是可以 你试过在8i上通用的吗 我很为此烦恼(替别人烦恼) 说得很过分哈!8i的现在很少了,基本都升级了! 8i还是很多在用的系统 不是说升级就升级的 |
|
返回顶楼 | |
发表时间:2006-04-28
BLOB blob = (BLOB) c.getImage();
会抛出异常,不能强制转换 绝对区分开了大小写的问题,后来经过多方搜索得到的解决方案是:通过org.hibernate.lob.SerializableBlob 来进行转换,代码如下: SerializableBlob blob = (SerializableBlob)pi.getUserphoto(); BLOB blob2 = (BLOB) blob.getWrappedBlob 用这种方法的前提是,Hibernate的连结配置必需是JDBC,换成JNDI就不成,郁闷。。。 |
|
返回顶楼 | |
发表时间:2006-04-30
session.refresh(addFile, LockMode.UPGRADE);; SerializableBlob sb = (SerializableBlob);addFile.getAfile();; BLOB blob = (BLOB); sb.getWrappedBlob();; OutputStream out = blob.getBinaryOutputStream();; String fileName = "xxx.jar"; File f = new File(fileName);; FileInputStream fin = new FileInputStream(f);; int count = -1, total = 0; byte[] data = new byte[(int); fin.available();]; fin.read(data);; out.write(data);; fin.close();; out.close();; session.flush();; 这段代码我没有太明白,直接就吧文件读取成byte[],然后save不行嘛?如果必须这样做的话,哪我从页面提交过来的byte[]是不是还要储存成文件,然后执行这样的操作呢? 也就是说,我从jsp进行文件上载,然后在从本地把上载的文件储存到数据库中,转化为文件这一步必须做嘛? |
|
返回顶楼 | |
发表时间:2006-06-26
出现blob ClassCastException的问题,都不是上述原因。
我也是无意中发现的,关键在于 session.refresh(entity, LockMode.UPGRADE); —— (1) 与 BLOB blob = (BLOB) entity.getImage(); ——(2) 的执行次序问题, 如果没有执行(1),而直接使用(2)获得blob,则获得的是hibernate的BlobImpl对象,出现类型转换错误;但是运行次序为(1)(2),则获得的是oracle.sql.BLOB对象,不会抛异常。 |
|
返回顶楼 | |
发表时间:2006-12-26
lovehibernate 兄,真的非常感谢。 使用你说的转型为SerializableBlob,然后getWrapBlob, 转型为oracle.sql.BLOB的方法我真的解决了在hibernate3中 写入BLOB数据的问题。原来以为这是hibernate3的一个bug, 以为在hibernate3中是不能写入BLOb数据的结果使用你的方法就 成功了!! 但是我还有一个疑问?你能不能把你解决这个问题的思路贴出来,比如怎么想到 要转型为SerializableBlob,然后又调用getWrapBlob?这里面有些什么道理呢? 再次感谢!!! |
|
返回顶楼 | |
发表时间:2007-04-06
最近工作中就遇到了这个问题,在这里找到了解决问题的方法.
真的太感谢了!看看这个贴子挺老的了,可是对我还是有帮助真是好贴子呀! |
|
返回顶楼 | |