| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 29/10/2006 19:49:01
|
andreiribas
JavaEvangelist
![[Avatar]](/images/avatar/39016cfe079db1bfb359ca72fcba3fd8.jpg)
Membro desde: 30/04/2006 10:43:13
Mensagens: 478
Localização: Curitiba - PR
Offline
|
Estou com um problema com o relacionamento n:m de duas tabelas minhas.
A tabela Produto e a tabela Venda tem o relacionamento n:m. Portanto, criei uma nova tabela com as chaves primárias de Produto e de Venda. Também incluí um atributo quantidade nessa tabela.
Se eu salvo a tabela Venda, o hibernate não salva a tabela produto_venda.
Se eu salvo a tabela Adicionaproduto, acontece o erro
Exception in thread "main" org.hibernate.id.IdentifierGenerationException: ids for this class must be manually assigned before calling save(): br.uem.din.pes2.loja.modelo.Adicionaproduto
E se eu salvo a tabela Produto, acontece o erro
Exception in thread "main" org.hibernate.PersistentObjectException: uninitialized proxy passed to save()
lembrando que as chaves primárias das tabelas produto e venda são geradas automaticamente
Alguém tem alguma idéia de como resolver isso??
|
SCJP 6.0
OCE JSP and Servlet Developer, JEE 6 |
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 30/10/2006 06:40:59
|
BrunoAlencar
HelloWorld
![[Avatar]](/images/avatar/d1e7b08bdb7783ed4fb10abe92c22ffd.jpg)
Membro desde: 27/07/2006 13:32:14
Mensagens: 10
Localização: Ji-Paraná/RO
Offline
|
Grande Andrei.
O Hibernate, sendo uma ferramenta para mapeamento objeto-relacional, terá que trabalhar com duas classes.
A primeira, tera o nome da tabela propria (relacionamento muitos para muitos) seguido de id (identificadora), a segunda terá apenas o nome da tabela propria.
No seu caso, Produtos e Vendas. Então, vejamos. Uma classe terá o nome de protudos_vendas_id (sem método main, apenas construtor), que por sua vez instanciará dois objetos a partir das classes produtos e vendas.
Ex.: private Produtos codprod;
private Vendas codvenda;
Em seguida será feito o encapsulameto desses objetos (criação do métodos setters e getters). Criada a tabela Produtos_Vendas_ID, voce criará a classe Produtos_Vendas. Nessa classe, voce criará um objeto a partir da classe Produtos_Vendas_ID. Pra facilitar a compreensao, de o nome desse objeto de "composite_id" (chave composta), e encapsule-o também.
Feito isso, partirá para o mapeamento. Aqui é que vem o "x" da questão. Criado o novo arquivo xml (produtos_vendas.hbm.xml), primeiro, como voce já deve saber, precisa apontar qual classe será mapeada para a criaçao da tabela no SGBD, certo? Então, aponte a classe Produtos_Vendas (sem o ID). Segundo, informe qual objeto deverá ser a chave composta, sim sim, chave composta e não primária. Utiize o atributo do Hibernate, "composite-id" e informe o objeto criado a partir da classe Produtos_Vendas_ID. Detalhe, informe que esse objeto encontra-se na Classe Produtos_Vendas_ID. Por mais que voce o tenha instanciado dentro de Produtos_Vendas, voce apenas o instanciou. Para ser localizado, deve ser informada a classe Produtos_Vendas_ID. Logo após, vem a parte de informar o relaciomaneto muitos para muitos, propriamente dito. Então, utilize o atributo <key-many-to-one name="nome do objeto" class="nome da classe"/>", para cada objeto.
Ai, voce deve estar se perguntando: "Mas, não é muitos para muitos, por aqui está muitos para um?". Muito simples, estamos criando manualmente a tabela própria, ou seja, as classes Produtos e Vendas terão ligação um para muitos com a tabela propria produtos_vendas, o que caracteriza N-N com produtos e vendas.
Assim que receber esse recado... te mando a parte de persistencia. ok?
Valeu...
Qualquer coisa... mande e-mail.
Fui...
|
Bruno Alencar |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 30/10/2006 06:46:52
|
BrunoAlencar
HelloWorld
![[Avatar]](/images/avatar/d1e7b08bdb7783ed4fb10abe92c22ffd.jpg)
Membro desde: 27/07/2006 13:32:14
Mensagens: 10
Localização: Ji-Paraná/RO
Offline
|
Ah sim... outro detalhe.
Na localização dos objetos dentro do atributo "key-many-to-one", o procedimento é o mesmo da chave composta. Voce deve informar que os objetos foram criados a partir da Classe Produtos e Vendas.OK?
Fui.
|
Bruno Alencar |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 30/10/2006 11:52:52
|
andreiribas
JavaEvangelist
![[Avatar]](/images/avatar/39016cfe079db1bfb359ca72fcba3fd8.jpg)
Membro desde: 30/04/2006 10:43:13
Mensagens: 478
Localização: Curitiba - PR
Offline
|
BrunoAlencar, obrigado pela resposta velho.
Felizmente, consegui achar um tutorial que explicou exatamente o que eu queria, que é na verdade a mesma coisa que você explicou.
Pra quem estiver interessado, os tutoriais estão em:
Mapeando Associações com Hibernate - Parte 1
http://www.jeebrasil.com.br/mostrar/12
Mapeando Associações com Hibernate - Parte 2
http://www.jeebrasil.com.br/mostrar/14
|
SCJP 6.0
OCE JSP and Servlet Developer, JEE 6 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 30/10/2006 18:13:16
|
BrunoAlencar
HelloWorld
![[Avatar]](/images/avatar/d1e7b08bdb7783ed4fb10abe92c22ffd.jpg)
Membro desde: 27/07/2006 13:32:14
Mensagens: 10
Localização: Ji-Paraná/RO
Offline
|
Grande...
Foi exatamente ai que eu encontrei minhas respostas...
Acredita?
Rs
Mas, valeu !
|
Bruno Alencar |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 25/04/2009 20:18:34
|
thiagoprocaci
Thread.start()
Membro desde: 23/04/2009 23:00:37
Mensagens: 35
Offline
|
Link interessante para mapeamento objeto-relacional com hibernate:
http://thiagoprocaci.blogspot.com/2009/04/mapeamento-objeto-relacional-com.html
|
Thiago Baesso Procaci
http://thiagoprocaci.blogspot.com/ |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 25/04/2009 20:19:14
|
thiagoprocaci
Thread.start()
Membro desde: 23/04/2009 23:00:37
Mensagens: 35
Offline
|
Link interessante para mapeamento objeto-relacional com hibernate:
http://thiagoprocaci.blogspot.com/2009/04/mapeamento-objeto-relacional-com.html
|
Thiago Baesso Procaci
http://thiagoprocaci.blogspot.com/ |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 20/11/2009 13:33:13
|
anakin__
What is classpath?
![[Avatar]](/images/avatar/77af69a8e2500351dc46c7daa33de5ca.jpg)
Membro desde: 09/06/2009 09:08:36
Mensagens: 9
Offline
|
ei galera eu ja tow bringando com esse hibernate ha algumas semanas...
agora tow com a seguinte bronca:
para retornar um objeto de uma tabela comum usa-se essa linha:
Produto p = (Produto) session.get(Produto.class,idproduto);
como o objeto q eu quero é de uma tabela q tem somente duas chaves primarias como pego esses objetos?
Como faço pra pegar os dados dessa tabela gerada do relacionamento?
tipo, eu quero saber quais sao as turmas q o professor "X" estar??
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 01/06/2010 20:47:31
|
vandinho
Thread.start()
Membro desde: 16/10/2009 13:25:10
Mensagens: 27
Offline
|
Aproveitando o assunto tenho uma dúvida quanto ao servlet da classe associativa. Como faço para os atributos da classes associadas ser vinculada a nova classe???
Ex: tenho duas classes Ordem de Servico e Estoque. Para eu saber que a ordem de servico x terá a peça 1 (exemplo). Como faço para que isso funcione, criei uma nova tabela UniaoOrdemEtq que armazenará esses dados, e já está devidadamente mapeada, mas a pergunta é como será o servlet desta nova classe se terá mesmo?? Pois vejo em muitos tutoriais exemplos de mapeamento de muitos pra muitos sem a utilização de servlet pra isso.
Alguém pode me ajudar
|
do amigo Vanderson |
|
|
 |
|
|