Pessoal, bom dia…
Estou com problema de lock ao realizar queries (HQL) com o Hibernate. Sempre que faço uma query, mesmo sem abrir transacao, o banco aponta lock de registros. Alguem já passou por isso ? Quando pego uma lista com 100 registros, por exemplo, todos ficam em estado de lock até que a session seja fechada.
Estou utilizando o Banco Adabas. Como não encontrei Dialeto para esse banco, peguei o dialeto do Oracle (pelo que percebi tem a sintaxe mais proxima) e fiz alguns ajustes. A conexao é gerenciada pelo Tomcat.
Tanto o AdabasDialect quanto o hibernate.cfg.xml estão o mais simples possivel.
Me disseram que talvez eu tivesse que usar org.hibernate.transaction.JTATransactionFactory, alguem sabe como posso usar essa classe ???
Exemplo de Consulta (CidadeDAO.java):
public ArrayList <CidadeBean> getListaSincronizar(SiteBean site) throws E EmpresaException {
ArrayList<CidadeBean> listaRetorno = new ArrayList<CidadeBean>();
Session session = null;
try {
StringBuffer hql = new StringBuffer("select c from CidadeBean c ");
hql.append("where c.codigoMatrizGrupo = ? ");
hql.append(" and rowno <= ").append(paginaAtual * linhasPorPagina);
hql.append("order by c.codigoMatrizGrupo, c.codigo");
session = HibernateUtil.getSession();
Query query = session.createQuery(hql.toString())
.setReadOnly(true)
.setTimeout(60)
.setInteger(0, site.getCodigoMatrizGrupo())
.setFirstResult(((paginaAtual - 1) * linhasPorPagina));
List lista = query.list();
if (lista != null && lista.size() > 0) {
listaRetorno = (ArrayList<CidadeDBBean>) lista;
}
} catch(Exception e) {
throw new EmpresaException(DBPropriedades.CONSTANT_VALUE_SISTEMA,this.getClass().getName()+".getListaSincronizar()","99","Erro ao localizar Cidade: "+ e.getMessage());
} finally {
try {
if (session != null) {
session.disconnect();
session.close();
}
} catch (Exception ex) {}
}
}
return listaRetorno;
}
AdabasDialect:
public class AdabasDialect extends Dialect {
public AdabasDialect() {
super();
registerDefaultProperties();
}
protected void registerDefaultProperties() {
getDefaultProperties().setProperty( Environment.USE_STREAMS_FOR_BINARY, "true" );
getDefaultProperties().setProperty(Environment.STATEMENT_BATCH_SIZE, NO_BATCH);
// Oracle driver reports to support getGeneratedKeys(), but they only
// support the version taking an array of the names of the columns to
// be returned (via its RETURNING clause). No other driver seems to
// support this overloaded version.
getDefaultProperties().setProperty( Environment.USE_GET_GENERATED_KEYS, "false" );
}
Hibernate.cfg.xml:
[code]<?xml version="1.0" encoding="UTF-8"?>
<session-factory>
<!-- Use a Tomcat 5.5 JNDI datasource -->
<property name="hibernate.dialect"> br.com.empresa.hibernate.dialect.AdabasDialect </property>
<property name="hibernate.connection.datasource">java:comp/env/jdbc/Adabas</property>
<property name="connection.autocommit">false</property>
<!-- XML mapping -->
<mapping resource="br/com/empresa/bean/map/CidadeBean.hbm.xml" />
[/code]