Maximum open cursors exceeded no hibernate

Olá!
Eu estou começando com hibernate a alguns meses e estou com um problema:

Estou criando uma pagina de cadastro que tem 3 combos dinamicas: campus,bloco e pavimento
Eu clico no primeiro combo e ele lista o segundo certinho.Depois eu clico no segundo, ele dispara o erro.
Alguem pode me ajudar???
erro:
[list]
root cause

java.sql.SQLException: ORA-01000: maximum open cursors exceeded

oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:114)
oracle.jdbc.ttc7.TTIoer.processError(TTIoer.java:208)
oracle.jdbc.ttc7.Oopen.receive(Oopen.java:118)
oracle.jdbc.ttc7.TTC7Protocol.open(TTC7Protocol.java:426)
oracle.jdbc.driver.OracleStatement.<init>(OracleStatement.java:288)
oracle.jdbc.driver.OracleStatement.<init>(OracleStatement.java:307)
oracle.jdbc.driver.OraclePreparedStatement.<init>(OraclePreparedStatement.java:191)
oracle.jdbc.driver.OraclePreparedStatement.<init>(OraclePreparedStatement.java:174)
oracle.jdbc.driver.OracleConnection.prepareStatement(OracleConnection.java:339)
org.hibernate.jdbc.AbstractBatcher.getPreparedStatement(AbstractBatcher.java:505)
org.hibernate.jdbc.AbstractBatcher.getPreparedStatement(AbstractBatcher.java:423)
org.hibernate.jdbc.AbstractBatcher.prepareQueryStatement(AbstractBatcher.java:139)
org.hibernate.loader.Loader.prepareQueryStatement(Loader.java:1547)
org.hibernate.loader.Loader.doQuery(Loader.java:673)
org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:236)
org.hibernate.loader.Loader.loadEntity(Loader.java:1860)
org.hibernate.loader.entity.AbstractEntityLoader.load(AbstractEntityLoader.java:48)
org.hibernate.loader.entity.AbstractEntityLoader.load(AbstractEntityLoader.java:42)
org.hibernate.persister.entity.AbstractEntityPersister.load(AbstractEntityPersister.java:3049)
org.hibernate.event.def.DefaultLoadEventListener.loadFromDatasource(DefaultLoadEventListener.java:399)
org.hibernate.event.def.DefaultLoadEventListener.doLoad(DefaultLoadEventListener.java:375)
org.hibernate.event.def.DefaultLoadEventListener.load(DefaultLoadEventListener.java:139)
org.hibernate.event.def.DefaultLoadEventListener.proxyOrLoad(DefaultLoadEventListener.java:195)
org.hibernate.event.def.DefaultLoadEventListener.onLoad(DefaultLoadEventListener.java:103)
org.hibernate.impl.SessionImpl.fireLoad(SessionImpl.java:878)
org.hibernate.impl.SessionImpl.internalLoad(SessionImpl.java:846)
org.hibernate.type.EntityType.resolveIdentifier(EntityType.java:557)
org.hibernate.type.EntityType.resolve(EntityType.java:379)
org.hibernate.type.ComponentType.resolve(ComponentType.java:584)
org.hibernate.type.ComponentType.nullSafeGet(ComponentType.java:275)
org.hibernate.loader.Loader.getKeyFromResultSet(Loader.java:1097)
org.hibernate.loader.Loader.getRowFromResultSet(Loader.java:565)
org.hibernate.loader.Loader.doQuery(Loader.java:701)
org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:236)
org.hibernate.loader.Loader.loadEntity(Loader.java:1860)
org.hibernate.loader.entity.AbstractEntityLoader.load(AbstractEntityLoader.java:48)
org.hibernate.loader.entity.AbstractEntityLoader.load(AbstractEntityLoader.java:42)
org.hibernate.persister.entity.AbstractEntityPersister.load(AbstractEntityPersister.java:3049)
org.hibernate.event.def.DefaultLoadEventListener.loadFromDatasource(DefaultLoadEventListener.java:399)
org.hibernate.event.def.DefaultLoadEventListener.doLoad(DefaultLoadEventListener.java:375)
org.hibernate.event.def.DefaultLoadEventListener.load(DefaultLoadEventListener.java:139)
org.hibernate.event.def.DefaultLoadEventListener.proxyOrLoad(DefaultLoadEventListener.java:195)
org.hibernate.event.def.DefaultLoadEventListener.onLoad(DefaultLoadEventListener.java:103)
org.hibernate.impl.SessionImpl.fireLoad(SessionImpl.java:878)
org.hibernate.impl.SessionImpl.internalLoad(SessionImpl.java:846)
org.hibernate.type.EntityType.resolveIdentifier(EntityType.java:557)
org.hibernate.type.EntityType.resolve(EntityType.java:379)
org.hibernate.type.ComponentType.resolve(ComponentType.java:584)
org.hibernate.type.ComponentType.nullSafeGet(ComponentType.java:275)
org.hibernate.loader.Loader.getKeyFromResultSet(Loader.java:1097)
org.hibernate.loader.Loader.getRowFromResultSet(Loader.java:565)
org.hibernate.loader.Loader.doQuery(Loader.java:701)
org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:236)
org.hibernate.loader.Loader.loadEntity(Loader.java:1860)
org.hibernate.loader.entity.AbstractEntityLoader.load(AbstractEntityLoader.java:48)
org.hibernate.loader.entity.AbstractEntityLoader.load(AbstractEntityLoader.java:42)
org.hibernate.persister.entity.AbstractEntityPersister.load(AbstractEntityPersister.java:3049)
org.hibernate.event.def.DefaultLoadEventListener.loadFromDatasource(DefaultLoadEventListener.java:399)
org.hibernate.event.def.DefaultLoadEventListener.doLoad(DefaultLoadEventListener.java:375)
org.hibernate.event.def.DefaultLoadEventListener.load(DefaultLoadEventListener.java:139)
org.hibernate.event.def.DefaultLoadEventListener.proxyOrLoad(DefaultLoadEventListener.java:195)
org.hibernate.event.def.DefaultLoadEventListener.onLoad(DefaultLoadEventListener.java:103)
org.hibernate.impl.SessionImpl.fireLoad(SessionImpl.java:878)
org.hibernate.impl.SessionImpl.internalLoad(SessionImpl.java:846)
org.hibernate.type.EntityType.resolveIdentifier(EntityType.java:557)
org.hibernate.type.EntityType.resolve(EntityType.java:379)
org.hibernate.type.ComponentType.resolve(ComponentType.java:584)
org.hibernate.type.ComponentType.nullSafeGet(ComponentType.java:275)
org.hibernate.loader.Loader.getKeyFromResultSet(Loader.java:1097)
org.hibernate.loader.Loader.getRowFromResultSet(Loader.java:565)
org.hibernate.loader.Loader.doQuery(Loader.java:701)
org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:236)
org.hibernate.loader.Loader.loadEntity(Loader.java:1860)
org.hibernate.loader.entity.AbstractEntityLoader.load(AbstractEntityLoader.java:48)
org.hibernate.loader.entity.AbstractEntityLoader.load(AbstractEntityLoader.java:42)
org.hibernate.persister.entity.AbstractEntityPersister.load(AbstractEntityPersister.java:3049)
org.hibernate.event.def.DefaultLoadEventListener.loadFromDatasource(DefaultLoadEventListener.java:399)
org.hibernate.event.def.DefaultLoadEventListener.doLoad(DefaultLoadEventListener.java:375)
org.hibernate.event.def.DefaultLoadEventListener.load(DefaultLoadEventListener.java:139)
org.hibernate.event.def.DefaultLoadEventListener.proxyOrLoad(DefaultLoadEventListener.java:195)
org.hibernate.event.def.DefaultLoadEventListener.onLoad(DefaultLoadEventListener.java:103)
org.hibernate.impl.SessionImpl.fireLoad(SessionImpl.java:878)
org.hibernate.impl.SessionImpl.internalLoad(SessionImpl.java:846)
org.hibernate.type.EntityType.resolveIdentifier(EntityType.java:557)
org.hibernate.type.EntityType.resolve(EntityType.java:379)
org.hibernate.type.ComponentType.resolve(ComponentType.java:584)
org.hibernate.type.ComponentType.nullSafeGet(ComponentType.java:275)
org.hibernate.loader.Loader.getKeyFromResultSet(Loader.java:1097)
org.hibernate.loader.Loader.getRowFromResultSet(Loader.java:565)
org.hibernate.loader.Loader.doQuery(Loader.java:701)
org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:236)
org.hibernate.loader.Loader.loadEntity(Loader.java:1860)

[/list]

meu jsp:

<html>
	<head>
		<title></title>
	</head>
	<%@taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
	<%@taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
	<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
	<%@taglib uri="https://ajax4jsf.dev.java.net/ajax" prefix="a4j"%>
	

	<body>

<H1 align="center">Cadastro de Salas</H1>
	<f:view>
	<h:form>
		<h:outputText value="Campus:" />
		<h:selectOneMenu id="campus" style="width: 172px" value="#(bCampus.campus.codcampus)" valueChangeListener="#{bCampus.listbloco}" onchange="submit()" immediate="true">   
			<f:selectItems value="#{bCampus.listarCampus}"/>
		</h:selectOneMenu><br>
		
		<h:outputText value="Bloco:"/>
		<h:selectOneMenu id="bloco" style="width: 172px" value="#(bBloco.bloco.codbloco)" valueChangeListener="#{bBloco.listpavimento}" onchange="submit()" immediate="true">
		<f:selectItems value="#{bCampus.listarBlocos}"/>
		</h:selectOneMenu><br>
		
		<h:outputText value="Pavimento:"/>
		<h:selectOneMenu id="pavimento" style="width: 172px" value="#(bPavimento.andar.pavimento.dscpavimento)">
		<f:selectItems value="#{bBloco.listarPavimentos}"/>
		</h:selectOneMenu>
		
		<br>
	</h:form>
	</f:view>
	</body>
</html>

meu hibernate.cfg.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
			"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
			"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
			
<hibernate-configuration>
	<session-factory>
		<property name="hibernate.connection.driver_class">
			oracle.jdbc.driver.OracleDriver
		</property>
		<property name="hibernate.connection.url">	
			jdbc:oracle:thin:@172.17.1.13:1521:ORCL
		</property>
		<property name="hibernate.dialect">
			org.hibernate.dialect.OracleDialect
		</property>
		<property name="hibernate.connection.username">
			SCIF
		</property>
		<property name="hibernate.connection.password">
		</property>	
		
		<property name="hibernate.show_sql">
			true
		</property>
		<property name="hibernate.format_sql">
			true
		</property>
						
		<mapping class="br.unig.scif.modelo.Campus"/>
		<mapping class="br.unig.scif.modelo.Bloco"/>
		<mapping class="br.unig.scif.modelo.Pavimento"/>
		<mapping class="br.unig.scif.modelo.Andar"/>	
	</session-factory>
</hibernate-configuration>

meu bean campus

public class CampusBean {
	private Campus campus = new Campus();
	private String codcampus = null;
	List listarCampus;
	List listarBlocos;

	public CampusBean() {
		super();
		// TODO Auto-generated constructor stub
	}

	public Campus getCampus() {
		return campus;
	}

	public void setCampus(Campus campus) {
		this.campus = campus;
	}

	public List<Campus> getListarCampus() {
		listarCampus = new ArrayList();
		listarCampus.add(new SelectItem(0,
				"Selecione um campus",null));
		
		Session session = new HibernateUtil().getSession();
		DaoFactory factory = new DaoFactory();
		factory.beginTransaction();
		List<Campus> busca = new Dao(session,Campus.class).listaTudo();
		factory.hasTransaction();
		factory.closeSession();
		for(Campus campus:busca){
			listarCampus.add(new SelectItem(campus.getCodCampus(),
					campus.getNomeCampus(),null));
		}
		return listarCampus;
	}

	public List getListarBlocos() {
		listarBlocos = new ArrayList();
		listarBlocos.add(new SelectItem(0,
				"Selecione um bloco",null));
		
		Campus c = new Campus();
		c.setCodCampus(this.codcampus);
		
		Session session = new HibernateUtil().getSession();
		DaoFactory factory = new DaoFactory();
		factory.beginTransaction();
		
		List<Bloco> busca = new BlocoDao(session).procuraBlocoporCampus(c);		factory.hasTransaction();
		factory.closeSession();
		listarBlocos.clear();
		for(Bloco bloco:busca){
			listarBlocos.add(new SelectItem(bloco.getCodBloco(),
					bloco.getCodBloco(),null));
		}
		return listarBlocos;
	}


	public void setListarBlocosporCampus(List listarBlocosporCampus) {
		this.listarBlocos = listarBlocosporCampus;
	}

	
	public String getCodcampus() {
		return codcampus;
	}

	public void setCodcampus(String codcampus) {
		this.codcampus = codcampus;
	}

	public void listbloco (ValueChangeEvent event){
		FacesContext facesContext = FacesContext.getCurrentInstance();   
		this.codcampus = event.getNewValue().toString();   
	}
}

bean bloco:


public class BlocoBean{
	private Bloco bloco;
	private String codbloco;
	List listarPavimentos;
	
		
	public String getCodbloco() {
		return codbloco;
	}


	public void setCodbloco(String codbloco) {
		this.codbloco = codbloco;
	}


	public BlocoBean() {
		super();
		// TODO Auto-generated constructor stub
	}

		
	public Bloco getBloco() {
		return bloco;
	}

	public void setBloco(Bloco bloco) {
		this.bloco = bloco;
	}

	public List getListarPavimentos() {
		listarPavimentos = new ArrayList();
		listarPavimentos.add(new SelectItem(0,
				"Selecione um pavimento",null));
		
		Bloco b = new Bloco();
		b.setCodBloco(this.codbloco);
		
		Session session = new HibernateUtil().getSession();
		DaoFactory factory = new DaoFactory();
		factory.beginTransaction();
				
		List<Pavimento> busca = new AndarDao(session).procuraPavimentoporBloco(b);System.out.println("listarPavimentos");
		factory.hasTransaction();
		factory.closeSession();
		session.flush();
		
		listarPavimentos.clear();
		for(Pavimento pavimento:busca){
			listarPavimentos.add(new SelectItem(pavimento.getCodPavimento(),
					pavimento.getDscPavimento(),null));
		}
		return listarPavimentos;
	}
	
	public void listpavimento (ValueChangeEvent event){
		FacesContext facesContext = FacesContext.getCurrentInstance();   
		this.codbloco = event.getNewValue().toString();   
	}
}