sexta-feira, 5 de março de 2010

Could not synchronize database state with session

Quem trabalha com hibernate com certeza já passou pelo seguinte erro:

2010/01/11-12:37:24,538 ERROR [AbstractFlushingEventListener] Could not synchronize database state with session
org.hibernate.HibernateException: Unexpected row count: 0 expected: 1
at org.hibernate.jdbc.NonBatchingBatcher.addToBatch(NonBatchingBatcher.java:32)

O primeiro pensamento é: fiz algo errado em código e não estou persistindo meus objetos corretamente. Foi assim que pensei quando tive esse problema recentemente.
Após verificar o meu código várias... várias vezes, me certifiquei que não tinha nada incorreto. E agora, o que está causando esse erro? Claro que só acontece em um Cliente específico e no seu ambiente de Produção.

O Banco de Dados é SQL Server 2000 com o WASCE (WebSphere Application Server Community Edition 1.1.0.1.

Após um bom tempo de código... código... código, fui atrás de bugs relacionados ao WASCE com Hibernate e nada novamente.

Então tive o insigth de avaliar o SQL Server. Para isso utilizei o Profiler (ferramenta que exibe trace de tudo o que acontece dentro do SQL Server).

Pronto! Encontrei o problema.
Na nossa funcionalidade trabalhamos com anexos e o SQL Server não estava conseguindo alocar memória para gravá-los. Utilizamos o tipo "java.sql.Blob" do hibernate com o tipo "image" do SQL Server.
Erro: Failed do reserve contiguous memory of Size



Solução: alterar os parâmetros de memória do SQL Server, pois ele estava com limite de memória. E conscientização dos usuários para que coloque anexos muitos grandes (façam tratamento, por exemplo, das imagens a serem anexadas)

Nenhum comentário:

Postar um comentário