Results 1 to 1 of 1

Thread: ORA-01000: maximum open cursors exceeded when pocess blob field

  1. #1
    Join Date
    Jan 2005
    Posts
    10

    Default ORA-01000: maximum open cursors exceeded when pocess blob field

    i used oracle10g ,spring 2.5.4,hibernate 3.2.6.ga to set up my web application. I need to store image into my database. My config as following:
    Code:
    <bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
            <property name="dataSource" ref="dataSource"/>
            <property name="configLocation" value="classpath:hibernate.cfg.xml"/>
            <property name="lobHandler" ref="oracleLobHandler"/>
            <property name="hibernateProperties">
                <value>
                    hibernate.dialect=${hibernate.dialect}
                    hibernate.query.substitutions=true 'Y', false 'N'
                    hibernate.cache.use_second_level_cache=true
                    hibernate.cache.provider_class=org.hibernate.cache.EhCacheProvider
                    hibernate.cache.use_query_cache=true
                    <!--hibernate.jdbc.batch_size=50-->
                    hibernate.jdbc.fetch_size=30
                    hibernate.max_fetch_depth=1
                </value>
                <!-- Turn batching off for better error messages under PostgreSQL -->
                <!-- hibernate.jdbc.batch_size=0 -->
            </property>
        </bean>
    <bean id="oracleLobHandler" class="org.springframework.jdbc.support.lob.DefaultLobHandler" lazy-init="true">
            <!--<property name="nativeJdbcExtractor">-->
                <!--<ref local="nativeJdbcExtractor"/>-->
            <!--</property>-->
        </bean>
    my blob model is following:
    Code:
    package com.aerostrong.phrs.model;
    
    import org.hibernate.annotations.Type;
    
    import javax.persistence.*;
    import java.util.Date;
    
    /**
     * Created by IntelliJ IDEA.
     * User: sunlf
     * Date: 2008-12-29
     * Time: 13:06:14
     * To change this template use File | Settings | File Templates.
     *  体检结果  step4
     */
    @Entity
    @Table(name = "wf_BodyResult")
    public class BodyResult  extends BaseObject{
        private Long id;
        private Date checkDate;
        private String ifPassed;
        private String remark;
        private String attach1Name;
        private byte[] attach1;
        private String attach2Name;
        private byte[] attach2;
        private String attach3Name;
        private byte[] attach3;
        private Date createDate=new Date();
        private String userName;
    
        private WorkflowInterview workflowInterview;
    
        @ManyToOne(cascade = CascadeType.REFRESH, optional = false)
        @JoinColumn(name = "Interview_id")
        public WorkflowInterview getWorkflowInterview() {
            return workflowInterview;
        }
    
        public void setWorkflowInterview(WorkflowInterview workflowInterview) {
            this.workflowInterview = workflowInterview;
        }
    
        @Id
        @GeneratedValue(strategy = GenerationType.AUTO)
        public Long getId() {
            return id;
        }
    
        public void setId(Long id) {
            this.id = id;
        }
    
        public String getAttach1Name() {
            return attach1Name;
        }
    
        public void setAttach1Name(String attach1Name) {
            this.attach1Name = attach1Name;
        }
        @Column(name = "attach1")
        @Lob
        @Type(type = "org.springframework.orm.hibernate3.support.BlobByteArrayType")
        public byte[] getAttach1() {
            return attach1;
        }
    
        public void setAttach1(byte[] attach1) {
            this.attach1 = attach1;
        }
    
        public String getAttach2Name() {
            return attach2Name;
        }
    
        public void setAttach2Name(String attach2Name) {
            this.attach2Name = attach2Name;
        }
        @Column(name = "attach2")
        @Lob
        @Type(type = "org.springframework.orm.hibernate3.support.BlobByteArrayType")
        public byte[] getAttach2() {
            return attach2;
        }
    
        public void setAttach2(byte[] attach2) {
            this.attach2 = attach2;
        }
    
        public String getAttach3Name() {
            return attach3Name;
        }
    
        public void setAttach3Name(String attach3Name) {
            this.attach3Name = attach3Name;
        }
    
        @Column(name = "attach3")
        @Lob
        @Type(type = "org.springframework.orm.hibernate3.support.BlobByteArrayType")
        public byte[] getAttach3() {
            return attach3;
        }
    
        public void setAttach3(byte[] attach3) {
            this.attach3 = attach3;
        }
    
        public Date getCheckDate() {
            return checkDate;
        }
    
        public void setCheckDate(Date checkDate) {
            this.checkDate = checkDate;
        }
    
        public String getIfPassed() {
            return ifPassed;
        }
    
        public void setIfPassed(String ifPassed) {
            this.ifPassed = ifPassed;
        }
    
        public String getRemark() {
            return remark;
        }
    
        public void setRemark(String remark) {
            this.remark = remark;
        }
    
        public Date getCreateDate() {
            return createDate;
        }
    
        public void setCreateDate(Date createDate) {
            this.createDate = createDate;
        }
    
        public String getUserName() {
            return userName;
        }
    
        public void setUserName(String userName) {
            this.userName = userName;
        }
    
        @Override
        public boolean equals(Object o) {
            if (this == o) return true;
            if (o == null || getClass() != o.getClass()) return false;
    
            BodyResult that = (BodyResult) o;
    
            if (checkDate != null ? !checkDate.equals(that.checkDate) : that.checkDate != null) return false;
            if (id != null ? !id.equals(that.id) : that.id != null) return false;
            if (ifPassed != null ? !ifPassed.equals(that.ifPassed) : that.ifPassed != null) return false;
            if (remark != null ? !remark.equals(that.remark) : that.remark != null) return false;
    
            return true;
        }
    
        @Override
        public int hashCode() {
            int result = id != null ? id.hashCode() : 0;
            result = 31 * result + (checkDate != null ? checkDate.hashCode() : 0);
            result = 31 * result + (ifPassed != null ? ifPassed.hashCode() : 0);
            result = 31 * result + (remark != null ? remark.hashCode() : 0);
            return result;
        }
    
        @Override
        public String toString() {
            final StringBuilder sb = new StringBuilder();
            sb.append("BackgroundCheck");
            sb.append(", id=").append(id);
            sb.append(", checkDate='").append(checkDate).append('\'');
            sb.append(", ifPassed='").append(ifPassed).append('\'');
            sb.append(", remark='").append(remark).append('\'');
            sb.append('}');
            return sb.toString();
        }
    }
    it seemed everything is ok,but after application run a long time.it throw a oracle error:
    Caused by: java.sql.SQLException: ORA-01000: maximum open cursors exceeded
    ORA-01000: maximum open cursors exceeded

    at oracle.jdbc.driver.DatabaseError.throwSqlException (DatabaseError.java:112)
    at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoe r.java:331)
    at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoe r.java:283)
    at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoe r.java:278)
    at oracle.jdbc.driver.T4C8TTILob.receiveReply(T4C8TTI Lob.java:930)
    at oracle.jdbc.driver.T4C8TTILob.getChunkSize(T4C8TTI Lob.java:329)
    at oracle.jdbc.driver.T4CConnection.getChunkSize(T4CC onnection.java:2003)
    at oracle.sql.BLOB.getChunkSize(BLOB.java:389)
    at oracle.sql.BLOB.getBufferSize(BLOB.java:410)
    at oracle.sql.BLOB.getBinaryStream(BLOB.java:229)
    at oracle.jdbc.driver.BlobAccessor.getBytes(BlobAcces sor.java:241)
    at oracle.jdbc.driver.OracleResultSetImpl.getBytes(Or acleResultSetImpl.java:708)
    at org.apache.commons.dbcp.DelegatingResultSet.getByt es(DelegatingResultSet.java:202)
    at org.apache.commons.dbcp.DelegatingResultSet.getByt es(DelegatingResultSet.java:202)
    at org.springframework.jdbc.support.lob.DefaultLobHan dler.getBlobAsBytes(DefaultLobHandler.java:118)
    at org.springframework.jdbc.support.lob.AbstractLobHa ndler.getBlobAsBytes(AbstractLobHandler.java:37)
    at org.springframework.orm.hibernate3.support.BlobByt eArrayType.nullSafeGetInternal

    (BlobByteArrayType.java:94)
    at org.springframework.orm.hibernate3.support.Abstrac tLobType.nullSafeGet(AbstractLobType.java:157)
    at org.hibernate.type.CustomType.nullSafeGet(CustomTy pe.java:105)
    at org.hibernate.type.AbstractType.hydrate(AbstractTy pe.java:81)
    at org.hibernate.persister.entity.AbstractEntityPersi ster.hydrate(AbstractEntityPersister.java:2101)
    at org.hibernate.loader.Loader.loadFromResultSet(Load er.java:1380)
    at org.hibernate.loader.Loader.instanceNotYetLoaded(L oader.java:1308)
    at org.hibernate.loader.Loader.getRow(Loader.java:120 6)
    at org.hibernate.loader.Loader.getRowFromResultSet(Lo ader.java:580)
    at org.hibernate.loader.Loader.doQuery(Loader.java:70 1)
    at org.hibernate.loader.Loader.doQueryAndInitializeNo nLazyCollections(Loader.java:236)
    at org.hibernate.loader.Loader.doList(Loader.java:221 3)
    ... 194 more

    can any one help me out on this issue.

    Thanks & Regards,
    Last edited by minikiller; Mar 2nd, 2009 at 02:05 AM.

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •