2

I am working on this tutorial, but had to upgrade to hibernate 4 as part of a number of changes to make it work with more modern tools.

Can someone show me how to fix the error being thrown when I try to do blob operations with a MySQL database in hibernate 4 and spring?

Currently, the following line of code is triggering an error:

session.save(document); //line 23

Here is the method in which the line of code resides:

@Transactional
public void save(Document document) {
   Session session = sessionFactory.getCurrentSession();
   session.save(document); //line 23
}

Here is the class that contains the method:

@Repository
public class DocumentDAO {

    @Autowired
    private SessionFactory sessionFactory;

    @Transactional
    public void save(Document document) {
        Session session = sessionFactory.getCurrentSession();
        session.save(document); //line 23
    }

    @Transactional
    public List<Document> list() {
       Session session = sessionFactory.getCurrentSession();
       List<Document> documents = null;
       try {documents = (List<Document>)session.createQuery("from Document").list();} 
       catch (HibernateException e) {e.printStackTrace();}
       return documents;
    }

    @Transactional
    public Document get(Integer id) {
       Session session = sessionFactory.getCurrentSession();
       return (Document)session.get(Document.class, id);
    }

   @Transactional
   public void remove(Integer id) {
       Session session = sessionFactory.getCurrentSession();
       Document document = (Document)session.get(Document.class, id);
       session.delete(document);
   }
}

And here is the exception that is being thrown:

HTTP Status 500 - Handler processing failed; nested exception is java.lang.AbstractMethodError: org.apache.commons.dbcp.DelegatingPreparedStatement.setBinaryStream(ILjava/io/InputStream;J)V

type Exception report

message Handler processing failed; nested exception is java.lang.AbstractMethodError: org.apache.commons.dbcp.DelegatingPreparedStatement.setBinaryStream(ILjava/io/InputStream;J)V

description The server encountered an internal error that prevented it from fulfilling this request.

exception 

org.springframework.web.util.NestedServletException: Handler processing failed; nested exception is java.lang.AbstractMethodError: org.apache.commons.dbcp.DelegatingPreparedStatement.setBinaryStream(ILjava/io/InputStream;J)V
org.springframework.web.servlet.DispatcherServlet.triggerAfterCompletionWithError(DispatcherServlet.java:1259)
org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:945)
org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:856)
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:936)
org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:838)
javax.servlet.http.HttpServlet.service(HttpServlet.java:647)
org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:812)
javax.servlet.http.HttpServlet.service(HttpServlet.java:728)

root cause 

java.lang.AbstractMethodError: org.apache.commons.dbcp.DelegatingPreparedStatement.setBinaryStream(ILjava/io/InputStream;J)V
org.hibernate.type.descriptor.sql.BlobTypeDescriptor$5$1.doBind(BlobTypeDescriptor.java:133)
org.hibernate.type.descriptor.sql.BlobTypeDescriptor$2$1.doBind(BlobTypeDescriptor.java:90)
org.hibernate.type.descriptor.sql.BasicBinder.bind(BasicBinder.java:93)
org.hibernate.type.AbstractStandardBasicType.nullSafeSet(AbstractStandardBasicType.java:280)
org.hibernate.type.AbstractStandardBasicType.nullSafeSet(AbstractStandardBasicType.java:275)
org.hibernate.type.AbstractSingleColumnStandardBasicType.nullSafeSet(AbstractSingleColumnStandardBasicType.java:57)
org.hibernate.persister.entity.AbstractEntityPersister.dehydrate(AbstractEntityPersister.java:2786)
org.hibernate.persister.entity.AbstractEntityPersister.dehydrate(AbstractEntityPersister.java:2761)
org.hibernate.persister.entity.AbstractEntityPersister$4.bindValues(AbstractEntityPersister.java:2968)
org.hibernate.id.insert.AbstractReturningDelegate.performInsert(AbstractReturningDelegate.java:57)
org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2975)
org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:3487)
org.hibernate.action.internal.EntityIdentityInsertAction.execute(EntityIdentityInsertAction.java:81)
org.hibernate.engine.spi.ActionQueue.execute(ActionQueue.java:377)
org.hibernate.engine.spi.ActionQueue.addResolvedEntityInsertAction(ActionQueue.java:214)
org.hibernate.engine.spi.ActionQueue.addInsertAction(ActionQueue.java:194)
org.hibernate.engine.spi.ActionQueue.addAction(ActionQueue.java:178)
org.hibernate.event.internal.AbstractSaveEventListener.addInsertAction(AbstractSaveEventListener.java:321)
org.hibernate.event.internal.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:286)
org.hibernate.event.internal.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:192)
org.hibernate.event.internal.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:125)
org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:206)
org.hibernate.event.internal.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:55)
org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:191)
org.hibernate.event.internal.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:49)
org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:90)
org.hibernate.internal.SessionImpl.fireSave(SessionImpl.java:764)
org.hibernate.internal.SessionImpl.save(SessionImpl.java:756)
org.hibernate.internal.SessionImpl.save(SessionImpl.java:752)
net.viralpatel.docmanager.dao.DocumentDAO.save(DocumentDAO.java:23)
net.viralpatel.docmanager.dao.DocumentDAO$$FastClassByCGLIB$$21ec305f.invoke(<generated>)
org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204)
org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:698)
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150)
org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:96)
org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:260)
org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:94)
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:631)
net.viralpatel.docmanager.dao.DocumentDAO$$EnhancerByCGLIB$$3c5ce7aa.save(<generated>)
net.viralpatel.docmanager.controller.DocumentController.save(DocumentController.java:86)
net.viralpatel.docmanager.controller.DocumentController$$FastClassByCGLIB$$5615142d.invoke(<generated>)
org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204)
org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:698)
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150)
org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:96)
org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:260)
org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:94)
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:631)
net.viralpatel.docmanager.controller.DocumentController$$EnhancerByCGLIB$$1edfcfb8.save(<generated>)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
java.lang.reflect.Method.invoke(Method.java:597)
org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:176)
org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:440)
org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:428)
org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:925)
org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:856)
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:936)
org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:838)
javax.servlet.http.HttpServlet.service(HttpServlet.java:647)
org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:812)
javax.servlet.http.HttpServlet.service(HttpServlet.java:728)  

Here is hibernate.cfg.xml:

<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">  
<hibernate-configuration>
    <session-factory>
        <mapping class="net.viralpatel.docmanager.model.Document" />
    </session-factory>

</hibernate-configuration>  

Here is the Document class:

@Entity
@Table(name="documents")
public class Document {

    @Id
    @GeneratedValue
    @Column(name="id")
    private Integer id;

    @Column(name="name")
    private String name;

    @Column(name="description")
    private String description;

    @Column(name="filename")
    private String filename;

    @Column(name="content")
    @Lob
    private Blob content;

    @Column(name="content_type")
    private String contentType;

    @Column(name="created")
    private Date created;

    //Getter and Setter methods
    public Blob getContent(){return content;}
    public String getContentType(){return contentType;}
    public String getDescription(){return description;}
    public String getFileName(){return filename;}
    public String getName(){return name;}

    public void setContent(Blob ct){content=ct;}
    public void setContentType(String ctype){contentType=ctype;}
    public void setDescription(String desc){description=desc;}
    public void setFileName(String fn){filename=fn;}
    public void setName(String nm){name=nm;}
}

jdbc.properties is:

jdbc.driverClassName= com.mysql.jdbc.Driver
jdbc.dialect=org.hibernate.dialect.MySQLDialect
jdbc.databaseurl=jdbc:mysql://localhost:3306/docbd
jdbc.username=user
jdbc.password=pwd  

Relevant sections of pom.xml include:

<dependency>
  <groupId>mysql</groupId>
  <artifactId>mysql-connector-java</artifactId>
  <version>5.1.10</version>
</dependency>
<dependency>
  <groupId>commons-dbcp</groupId>
  <artifactId>commons-dbcp</artifactId>
  <version>20030825.184428</version>
</dependency>
<dependency>
  <groupId>commons-pool</groupId>
  <artifactId>commons-pool</artifactId>
  <version>1.5.4</version>
</dependency>
<dependency>
  <groupId>commons-fileupload</groupId>
  <artifactId>commons-fileupload</artifactId>
  <version>1.2.1</version>
</dependency>
<dependency>
  <groupId>commons-io</groupId>
  <artifactId>commons-io</artifactId>
  <version>1.3</version>
</dependency>
15
  • Can you show your entity and your datasource/conenction and hibenate configs? Commented Nov 22, 2013 at 2:53
  • I mean your Document class Commented Nov 22, 2013 at 2:56
  • also, what version of apache database connection pooling are you using and are you sure that's the full stack? Commented Nov 22, 2013 at 2:57
  • I mean your hibernate.cfg.xml orwherever you configure the database connection details. Commented Nov 22, 2013 at 2:58
  • @Taylor I added some things. Are they what you are looking for? I also have a jdbc.properties file that sets values for 5 jdbc properties and is called from my application context xml. Do you see that my hibernate.cfg.xml references hibernate 3? Is that the error? If so, how do I fix it? Commented Nov 22, 2013 at 3:03

1 Answer 1

2

Problem would appear to be a dated version of apache dbcp. Update that to 1.4 or higher in your pom.xml and you should be good to go.

Sign up to request clarification or add additional context in comments.

4 Comments

Thank you. What about the other items from pom.xml that I posted above?
I changed commons-dbcp version to 1.4, deleted my .m2 folder, and then forced a maven update to create a new .m2 folder. Now there are two buildpath errors, one related to hibernate-core-4.2.6.Final.jar and the other related to servlet-api-2.5.jar , both of which are indeed in the correct places in the .m2 folder. I think maven mixes things up when seemingly unrelated things are changed in pom.xml. Do you have suggestions for fixing this? here is a relevant link: stackoverflow.com/questions/20101876/…
you don't need to delete your .m2 folder ever. Not sure what your buildpath errors are from, were you using a custom maven settings.xml you will have deleted it and would need to replace it. What build path errors are you getting?
+1 and credit for the answer. Thank you for all of your patient help. Oddly enough, turning off my machine last night and restarting it this morning automatically triggered whatever was the actual solution to the build path errors. Your dbcp upgrade suggestion is what fixed the problem that started this post. As for deleting .m2, I usually make a backup first. Thank you again.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.