在hibernate中对oracle的clob和blob字段的处理采用光标的方式来处理,其中隐含的深层含义是:对该类型字段的存取,hibernate维护了一个关联该字段的数据库的连接A,该连接和session的连接有可能不是同一个,因此问题就出来了,在session中缓存的具有该字段的对象,如果上述的连接A断开,那么该字段的获取将报错。如下: java.sql.SQLException: Must be logged on to server
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:134) at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:179) at oracle.jdbc.dbaccess.DBError.check_error(DBError.java:1160) atoracle.jdbc.ttc7.TTC7Protocol.assertLoggedIn(TTC7Protocol.java:2296) atoracle.jdbc.ttc7.TTC7Protocol.freeTemporaryLob(TTC7Protocol.java:3351) atoracle.sql.LobDBAccessImpl.freeTemporary(LobDBAccessImpl.java:774) at oracle.sql.CLOB.freeTemporary(CLOB.java:1085) at oracle.sql.CLOB.freeTemporary(CLOB.java:1036) 上边时clob字段的出错信息,blob字段类似。解决办法:对象在session中进行reload操作,即session.refresh(Object o)操作。
Hibernate处理CLOB与BLOB
本文探讨了在Hibernate框架中处理Oracle数据库的CLOB和BLOB类型字段时可能遇到的问题,特别是当这些字段的数据库连接与session连接不一致时出现的错误。文章详细解析了错误产生的原因,并提供了解决方案——通过session.refresh方法重新加载对象。
306

被折叠的 条评论
为什么被折叠?



