Hibernate操作Blob类型字段出现java.lang.AbstractMethodError: oracle.jdbc.driver.OracleResultSetImpl.getBlob(Ljava/lang/String;)Ljava/sql/

首先描述一下本问题吧,此问题其实就是用户定义的Hibernate中的字段类型与Oracle中自带的类的数据操作类型相冲突。

比如:

1、在vo中java文件声明类似如下,

 

private Blob messageBody;

 

public Blob getMessageBody() {
  return this.messageBody;
 }

 

 public void setMessageBody(Blob messageBody) {
  this.messageBody = messageBody;
 }

 

 

2、Hibernate中X.hbm.xml中定义为:

 

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!--
    Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
    <class name="com.mail.vo.Spool" table="SPOOL" schema="EJMAIL">
        <composite-id name="id" class="com.mail.vo.SpoolId">
 ........

.........
        <property name="messageBody" type="java.sql.Blob">
            <column name="MESSAGE_BODY" not-null="true" />
        </property>
      
    </class>
</hibernate-mapping>

这样,在1、2中就可以形成一种映射,这个是没问题的,然而,问题的关键就在于,当我们要在其他类中操作我们的表时,有时会遇到这样的异常“java.lang.AbstractMethodError: oracle.jdbc.driver.OracleResultSetImpl.getBlob(Ljava/lang/String;)Ljava/sql/Blob;”,例如:以下这个类,

 

package com.mail.struts.action;

import java.util.List;

......

......

 

public class LoginAction extends Action {
......

......

 public LoginAction() {
 }

 

 public ActionForward execute(ActionMapping mapping, ActionForm form,
   HttpServletRequest request, HttpServletResponse response) {

 

  HttpSession httpSession = request.getSession();
  SpoolDAOImpl spoolDAOImpl = new SpoolDAOImpl();
 

  String forward = null;

 

   try {
    list = spoolDAOImpl.findAll();
   } catch (Exception e) {
    e.printStackTrace();
   }

 .....

......  

  return mapping.findForward(forward);
 


 当执行红色字体的代码时,系统调用Oracle驱动中的oracle.jdbc.driver.OracleResultSetImpl.getBlob(String)方法,此方法在不同版本的定义不一样,最新版本的定义可以是oracle.jdbc.driver.OracleResultSetImpl.getBlob(Blob),如果你的驱动是相对较低版本的,有可能产生方法参数类型不兼容的异常,解决方法就是在网上找个新的驱动替换掉原来的那个旧版本的。

 

最新驱动下载http://download.csdn.net/source/807689

如果还不能解决问题,可以加Q:244678184

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值