Para os experts em Hibernate [Verdadeiro Problema]

10 respostas
felipeguerra

Boa tarde Pessoa!

Tenho um problema e gostaria de uma força.

Acontece o seguinte, o Hibernate não está conversando direito com o Banco de Dados. Em uma determinada transação, ocorre um estranha SQLGrammarException (aparentemente sem coerência), então, na hora de fechar a sessão, o Hibernate reclama novamente de um erro na hora de fechar a tal sessão, e é aí que que surge o maior de todos os enroscos: A TRANSAÇÃO NO BANCO AINDA ESTÁ ATIVA, OU SEJA, O HIBERNATE NÃO MANDOU UM COMMIT OU ROLLBACK!

Essa falta de sincronia, vai ocasionar diversos problemas na aplicação.

Alguém já passou por isso ou tem uma idéia do que possa ser? Talvez configuração equivocada do Hibernate, problema pessoa com o SQL Server 2005 (sim, é esse o banco)?

Aproveitando, como, através do Hibernate, eu configuro para que ele não deixe o SQL Server dar PageLock e isso evoluir para um TableLock, ou seja, sempre acontecer um RowLock?

Abraços

10 Respostas

felipeguerra
<hibernate-configuration>

    <session-factory>
    	<property name="connection.datasource">java:/jdbc/OABDS</property>
        <property name="dialect">org.hibernate.dialect.SQLServerDialect</property>
        <property name="show_sql">false</property>
        <property name="hibernate.connection.isolation">4096</property>
        <property name="transaction.factory_class">
             org.hibernate.transaction.JDBCTransactionFactory
        </property>
        <property name="hibernate.cache.provider_class">
             org.hibernate.cache.HashtableCacheProvider
        </property>
        <property name="hibernate.hbm2ddl.auto">none</property>
        <property name="hibernate.session_factory_name">
        	 java:/hibernate/OABSessionFactory
        </property>
 </session-factory>
</hibernate-configuration>
felipeguerra

Não gosto de ser chato, mas é que tem uma galera boa aqui que pode me ajudar…

Valeu

felipeguerra

Ninguém??? :cry:

Herrera

tem uma lista somente para perguntas a respeito de persistencia. mova para lá que a galera responde.

Herrera

felipeguerra

Herrera:
tem uma lista somente para perguntas a respeito de persistencia. mova para lá que a galera responde.

Herrera

Vc não está falando sério, né?

felipeguerra

Mais alguém???

Paulo_Silveira

Ola Felipe

Se gerou SQLGrammarException, é que a HQL gerou uma SQL ruim atraves do dialeto que voce esta usando. Pode ser culpa do hibernate, pode ser culpa da sua HQL. independente disso, a transacao esta ficando pendente por causa do gerenciamento da session. Voce deve usar um bloco finally para que, nao importando se houve sucesso ou nao na transacao, voce verifique se ela foi comitada/rollbackada. Se ela nao foi, voce deve tomar uma atitude em relacao a isso, ou voce vai ter problemas de phantom reads e excesso de transacoes abertas e possiveis locks (ja tive isso com o mysql, quando nao estava gerenciando direito o ciclo de vida da transacao).

Lembre-se: sempre devemos tomar cuidado com os recursos caros, como InputStreas, Connections, Sockets, Sessions, EntityManagers, Threads, etc…

Poste seu codigo de gerenciamento de exceptions (HibernateException)… e damos alguns pitacos

abracos

felipeguerra

Vamos lá, o pouco tempo que tenho vou usar para te esclarecer o que prometi

Paulo Silveira:
…independente disso, a transacao esta ficando pendente por causa do gerenciamento da session. Voce deve usar um bloco finally para que, nao importando se houve sucesso ou nao na transacao, voce verifique se ela foi comitada/rollbackada.

Isso SEMPRE é feito, foi uma das primeiras coisas que resolvi verificar…

Paulo Silveira:

Lembre-se: sempre devemos tomar cuidado com os recursos caros, como InputStreas, Connections, Sockets, Sessions, EntityManagers, Threads, etc…
abracos

Tomar cuidado em qual sentido?

Valeu, em breve eu posto o código da exception gerada (assim que encontrar).

Abraço

felipeguerra

Paulo,

Coloquei o detalhe do erro e as classes envolvidas num doc para ficar mais fácil a leitura.

Valeu

Sefo

Já passei por esse problema, mas confesso que não lembro como resolvi.

Tem como postar o código e como é feito o mapeamento com o banco(hibernate.properties ou cfg.xml)?

Criado 8 de agosto de 2008
Ultima resposta 8 de ago. de 2008
Respostas 10
Participantes 4