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:
my blob model is 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>
it seemed everything is ok,but after application run a long time.it throw a oracle error: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(); } }
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,


Reply With Quote