hibernate. erro ao salvar objeto com + de 2 itens [resolvido]  XML
Índice dos Fóruns » Java Avançado
Autor Mensagem
ronaldorezende
JavaGuru

Membro desde: 16/03/2005 14:26:23
Mensagens: 233
Offline

Tenho um objeto que é composto de vários outros.
PecaEstrutural<>------> * ItensDePecaEstrutural
Quando salvo o objeto, ele salva corretamente se a coleção itens tiver apenas 1 objeto. Se tiver 2, dá o erro abaixo.
Quando eu faço o commit, ele faz o insert do log abaixo e o restante.
O que tem antes do insert, é gerado antes do commit.

This message was edited 5 times. Last update was at 30/05/2005 14:48:01

Mauricio Linhares
Moderador
[Avatar]

Membro desde: 09/01/2005 23:28:22
Mensagens: 3717
Localização: João Pessoa, Paraíba - Brasil
Offline

O erro não parece ser do Hibernate companheiro, tá vindo lá do seu driver JDBC.

Meu blog sobre desenvolvimento | My Last.fm | @mauriciojr

Screencast de Introdução a linguagem Objective-C
[WWW]
ronaldorezende
JavaGuru

Membro desde: 16/03/2005 14:26:23
Mensagens: 233
Offline

Mas o erro é gerado quando eu faço um commit na transação do hibernate.
Mauricio Linhares
Moderador
[Avatar]

Membro desde: 09/01/2005 23:28:22
Mensagens: 3717
Localização: João Pessoa, Paraíba - Brasil
Offline

Pois é, mas quando é um erro do próprio Hibernate ele dá uma mensagem dele ou mostra a mensagem do banco, nesse caso o erro está ocorrendo porque o banco parece ter fechado o result set antes do Hibernate terminar de carregar todos os objetos, o que não deveria estar acontecendo.

Eu acho difícil disso ser erro no hibernate, você poderia mostrar os mapeamentos e as classes que estão sendo persistidas?

Meu blog sobre desenvolvimento | My Last.fm | @mauriciojr

Screencast de Introdução a linguagem Objective-C
[WWW]
ronaldorezende
JavaGuru

Membro desde: 16/03/2005 14:26:23
Mensagens: 233
Offline

Fiz uma classe de teste para a situação. Veja abaixo:



Mauricio Linhares
Moderador
[Avatar]

Membro desde: 09/01/2005 23:28:22
Mensagens: 3717
Localização: João Pessoa, Paraíba - Brasil
Offline

Olha, não sei como você está fazendo pra pegar essas sessões, nem sei porque você está abrindo e fechando uma dúzia de sessões ao mesmo tempo quando apenas uma seria mais do que o suficiente, mas tente usar a mesma sessão que você abriu no início do código pra fazer tudo, se der erro você posta aqui.

Outra coisa, você está usando ThreadLocal? Como é que funciona a classe que abre as sessões?

This message was edited 1 time. Last update was at 28/05/2005 12:46:46


Meu blog sobre desenvolvimento | My Last.fm | @mauriciojr

Screencast de Introdução a linguagem Objective-C
[WWW]
ronaldorezende
JavaGuru

Membro desde: 16/03/2005 14:26:23
Mensagens: 233
Offline

Oi não estou usando thread local não. Minha aplicação é uma aplicação desktop c/ swing sem servidor de aplicação. Acesso apenas o banco de dados. Veja minha classe Hibernateutil abaixo. Eu abro várias sessoes, pois quero simular o que está acontecendo no programa. No programa, tem os métodos de obter objetos, que possuem suas próprias sessoes.
Além disso, tenho a tela de pesquisa e a tela de edição. Cada uma dessas tem sua própria sessao.

This message was edited 1 time. Last update was at 29/05/2005 23:43:58

Mauricio Linhares
Moderador
[Avatar]

Membro desde: 09/01/2005 23:28:22
Mensagens: 3717
Localização: João Pessoa, Paraíba - Brasil
Offline

Só que nessa classe HibernateUtil você está abrindo e fechando as sessões junto com as transações, o comportamento normal do Hibernate, diferentemente do seu código de testes, onde você abre sessões sem transações e mistura diversos objetos em sessões diferentes com objetos que não estão mais em sessão nenhuma.

Veja que na sua classe HibernateUtil, o objeto só é retornado quando o Hibernate faz o commit na transação e fecha a sessão, o que quer dizer que todos os objetos que saem dali estão "soltos", não fazem mais parte de sessão nenhuma.

Faça um teste usando essa sua classe HibernateUtil.

Meu blog sobre desenvolvimento | My Last.fm | @mauriciojr

Screencast de Introdução a linguagem Objective-C
[WWW]
ronaldorezende
JavaGuru

Membro desde: 16/03/2005 14:26:23
Mensagens: 233
Offline

Nesse exemplo estou usando apenas o método getSession da classe HibernateUtil.

ronaldorezende
JavaGuru

Membro desde: 16/03/2005 14:26:23
Mensagens: 233
Offline

Iniciar transações é sempre obrigatório? Realmente, no meu código não inicio transações sempre. Na minha classe hibernateUtils, faço isso nos métodos padrões.
ronaldorezende
JavaGuru

Membro desde: 16/03/2005 14:26:23
Mensagens: 233
Offline

Acho que tem um erro no meu mapeamento. Minha classe ItemPecaEstrutural compõe a classe PecaEstrutural. No mapeamento, eu indico que o id da coleção é o campo ITEM_PECA_ESTRUTURAL_ID da tabela. Mas eu não tenho uma propriedade para essa coluna.
Acho que esse pode ser o erro. Alguém sabe como eu poderia incluir isso nesse mapeamento?

ronaldorezende
JavaGuru

Membro desde: 16/03/2005 14:26:23
Mensagens: 233
Offline

Fiz a modificação para usar apenas 1 seção e 1 transação. Mas deu o erro abaixo, ao fazer o segundo load.

Mauricio Linhares
Moderador
[Avatar]

Membro desde: 09/01/2005 23:28:22
Mensagens: 3717
Localização: João Pessoa, Paraíba - Brasil
Offline

O erro continua sendo porque os statements parecem estar fechados, faça como eu disse lá no início e use uma única sessão e uma única transação pra tudo, só pra ver no que vai dar.

Meu blog sobre desenvolvimento | My Last.fm | @mauriciojr

Screencast de Introdução a linguagem Objective-C
[WWW]
ronaldorezende
JavaGuru

Membro desde: 16/03/2005 14:26:23
Mensagens: 233
Offline

Fiz isso nesse código acima. O erro foi gerado do mesmo jeito, quando acontece o trans.commit().
Filipe Sabella
GUJ Expert

Membro desde: 12/03/2003 11:25:57
Mensagens: 4680
Offline

google/gavin king wrote:
Gavin . King
Wed, 05 Feb 2003 02:58:59 +0100

How disconcerting. The exception is being thrown by the JDBC driver
and is most likely something to do with connection pooling. Looks
like you should disable C3P0's prepared statement cache. (Or
try some other connection pool implementation...)

Former LIPE.
[ICQ]
 
Índice dos Fóruns » Java Avançado
Ir para:   
Powered by JForum 2.1.8 © JForum Team