Mapeamento Hibernate

Pessoal to em duvida em fazer o mapeamento da relacao abaixo, eu consigo fazer mas ele n ta preenchendo a coluna “quantidade”, ja rodei uns codigos ai, mas nao encontro igual ao q quero, mas tb acho q n seja dificil, eh q estou me enrrolando nesse mapeamento. Alguem poderia colocar o codigo desse mapeamento?? Vlw…

Eh um relacionamento N:N entre CLIENTE e PRODUTO, a tabela do meio eh a PEDIDO.

Vo colocar o codigo de mapeamento q ja fiz, mas falta modificar p cadastrar a coluna “quantidade” de PEDIDO.

CLIENTE.HBM.XML

[code]<?xml version="1.0" encoding="UTF-8"?>

<class name="loja.Cliente" table="cliente">

	<id name="id" type="integer" column="id">
                    <generator class="increment"/>
	</id>

	<property name="nome" type="string" column="nome"/>
            <property name="endereco" type="string" column="endereco"/>
            <property name="bairro" type="string" column="bairro"/>
            <property name="numero" type="integer" column="numero"/>
            <property name="cidade" type="string" column="cidade"/>
            <property name="estado" type="string" column="estado"/>
            <property name="cep" type="string" column="cep"/>
            <property name="forma_pagamento" type="string" column="forma_pagamento"/>
            <property name="info_pagamento" type="string" column="info_pagamento"/>
            <property name="data" type="date" column="data"/>
	
	<set name="produtos"
		 table="pedido">

		<key column="fk_cliente"/>
		<many-to-many class="loja.Produto" column="fk_produto"/>

	</set>

</class>
[/code]

PRODUTO.HBM.XML

[code]<?xml version="1.0" encoding="UTF-8"?>

<class name="loja.Produto" table="produto">

	<id name="id" type="integer" column="id">
                    <generator class="increment"/>
	</id>
	
	<property name="nome" type="string" column="nome"/>
            <property name="descricao" type="string" column="descricao"/>
            <property name="preco" type="float" column="preco"/>
            <property name="promocao" type="char" column="promocao"/>

	<set name="clientes"
		 table="pedido"
		 inverse="true">
		 
		<key column="fk_produto"/>
		<many-to-many class="loja.Cliente" column="fk_cliente"/>
		
	</set>

</class>

[/code]

Com estes 2 mapeamentos ele ja cadastra nas 3 tabelas, so n preenche a coluna “quantidade”. Dai eu fiz 1 mapeamento p PEDIDO p ve se consigo cadastrar a “quantidade”, mas n pegou. Segue abaixo:

PEDIDO.HBM.XML

[code]<?xml version="1.0" encoding="UTF-8"?>

<class name="loja.Pedido" table="pedido">

	<composite-id>
                <key-many-to-one name="fk_produto" class="loja.Produto" column="fk_produto"/>
                <key-many-to-one name="fk_cliente" class="loja.Cliente" column="fk_cliente"/>
            </composite-id>

	<property name="quantidade" type="integer" column="quantidade"/>
            	
</class>
[/code]

pow, ng nunca fez algo parecido? to ferrado!!! ehehee

Dá uma olhada neste tutorial, vai te ajudar !!!

http://www.guj.com.br/java.tutorial.artigo.174.1.guj

nossa kra estranho sempre vi assim
Cliente tem varios pedidos e pedidos tem varios itens, pq olhando no seu mapeamento cliente tem varios produtos esta certo, é so vc colocar setar a quantidade e habilitar cascate all que ele deve gravar tudo, adicione a tag insert=true e update=true tbm no mapeamento que tem o composite id.

qualquer coisa estamos ai

Abraços

[quote=foliveira81]nossa kra estranho sempre vi assim
Cliente tem varios pedidos e pedidos tem varios itens, pq olhando no seu mapeamento cliente tem varios produtos esta certo, é so vc colocar setar a quantidade e habilitar cascate all que ele deve gravar tudo, adicione a tag insert=true e update=true tbm no mapeamento que tem o composite id.

qualquer coisa estamos ai

Abraços
[/quote]

na verdade esse relacionamento usualmente eh feito assim:

cliente 1:n pedido
pedido n:n produto
e listaItens seria a tabela do meio entre pedido e produto

mas por algumas razoes o mapeamento tem q ser o exposto como fiz, nao eh o normalmente usado, mas creio eu q tb n esteja errado.

vo tentar o q vcs disseram ai, vlw…

[quote=carlos.cambra]Dá uma olhada neste tutorial, vai te ajudar !!!

http://www.guj.com.br/java.tutorial.artigo.174.1.guj[/quote]

ja li 300xesse tutorial, mto bom, mas n tem este mapeemento especifico. ja fui ate no site do hibernate, mapeamento igual n achei. por enqto vo tentando…

ng fez tal mapeamento? eh bem usado esse relacionamento de BD. ja rodei d+, vo tentando por enqto…

hlds,

Sinceramente, essa sua modelagem e mapeamento estão um pouco confusos. Mas vamos lá…

Primeiro, uma pergunta: qual das entidades você está tentando persistir? Supondo (você não deixou isso claro) que seja Cliente, já tentou persistir uma coleção de pedidos ao invés de uma coleção de produtos?

Cara, eu tive o mesmo problema e ja li em várioas lugares a seguinte mensagem: Não é aconselhavel utilzar chave composta na modelagem do banco.

Mas… se mesmo assim você não tiver como fugir eu não tenho nada pronto aqui mas sei que você tera de usar um cara chamado “COMPOSITE-ID” no google tem algumas coisas falando dele. Veja se te ajuda.

falou!

Ricardo Cabral

[quote=esb]hlds,

Sinceramente, essa sua modelagem e mapeamento estão um pouco confusos. Mas vamos lá…

Primeiro, uma pergunta: qual das entidades você está tentando persistir? Supondo (você não deixou isso claro) que seja Cliente, já tentou persistir uma coleção de pedidos ao invés de uma coleção de produtos?
[/quote]

to tentando persistir cliente, produto e pedido

mas se fosse n:n sem coluna em pedido, so precisava persistir cliente e produto

mas como tem a coluna quantidade ai to vendo q tenho q criar um bean p pedido tb.

eu n to achando nd confuso nisso :confused:

mas qlq coisa fala ai q te esclareco

[quote=Cabral]Cara, eu tive o mesmo problema e ja li em várioas lugares a seguinte mensagem: Não é aconselhavel utilzar chave composta na modelagem do banco.

Mas… se mesmo assim você não tiver como fugir eu não tenho nada pronto aqui mas sei que você tera de usar um cara chamado “COMPOSITE-ID” no google tem algumas coisas falando dele. Veja se te ajuda.

falou!

Ricardo Cabral[/quote]

cara ate respeito sua opinao. mas dizer q n eh aconselhavel usar chave composta, eh dizer p n usar um dos relacionamentos basicos de banco, o N:N, isso na minha opiniao n existe. eu utilizei o composite id no mapeamento de pedido, pode ate ver la em cima, mas n acertei em algo

msm assim vlw a juda, por enqto vo tenatndo outras alternativas

[quote=hlds][quote=esb]hlds,

Sinceramente, essa sua modelagem e mapeamento estão um pouco confusos. Mas vamos lá…

Primeiro, uma pergunta: qual das entidades você está tentando persistir? Supondo (você não deixou isso claro) que seja Cliente, já tentou persistir uma coleção de pedidos ao invés de uma coleção de produtos?
[/quote]

to tentando persistir cliente, produto e pedido

mas se fosse n:n sem coluna em pedido, so precisava persistir cliente e produto

mas como tem a coluna quantidade ai to vendo q tenho q criar um bean p pedido tb.

eu n to achando nd confuso nisso :confused:

mas qlq coisa fala ai q te esclareco[/quote]

Eu entendi que você quer persistir os três, mas está fazendo isso a partir de qual das três entidades? Em outras palavras, você tá dando o save em qual entidade? Clientes? Ou está dando save separado em cada entidade?

[quote=hlds][quote=Cabral]Cara, eu tive o mesmo problema e ja li em várioas lugares a seguinte mensagem: Não é aconselhavel utilzar chave composta na modelagem do banco.

Mas… se mesmo assim você não tiver como fugir eu não tenho nada pronto aqui mas sei que você tera de usar um cara chamado “COMPOSITE-ID” no google tem algumas coisas falando dele. Veja se te ajuda.

falou!

Ricardo Cabral[/quote]

cara ate respeito sua opinao. mas dizer q n eh aconselhavel usar chave composta, eh dizer p n usar um dos relacionamentos basicos de banco, o N:N, isso na minha opiniao n existe. eu utilizei o composite id no mapeamento de pedido, pode ate ver la em cima, mas n acertei em algo

msm assim vlw a juda, por enqto vo tenatndo outras alternativas[/quote]

Cara não é opinião minha, foi apenas o que eu li nos lugares em que procurei quando tive o mesmo problema ;).

o relacionamento que voce procura no hibernate se chama “composite-id”

esse composite-id é o “bean” que voce vai criar . da uma procuradinha que eu acho que tem em portugues…

falou

A solução do Cabral pode funcionar!

[quote=esb][quote=hlds][quote=esb]hlds,

Sinceramente, essa sua modelagem e mapeamento estão um pouco confusos. Mas vamos lá…

Primeiro, uma pergunta: qual das entidades você está tentando persistir? Supondo (você não deixou isso claro) que seja Cliente, já tentou persistir uma coleção de pedidos ao invés de uma coleção de produtos?
[/quote]

to tentando persistir cliente, produto e pedido

mas se fosse n:n sem coluna em pedido, so precisava persistir cliente e produto

mas como tem a coluna quantidade ai to vendo q tenho q criar um bean p pedido tb.

eu n to achando nd confuso nisso :confused:

mas qlq coisa fala ai q te esclareco[/quote]

Eu entendi que você quer persistir os três, mas está fazendo isso a partir de qual das três entidades? Em outras palavras, você tá dando o save em qual entidade? Clientes? Ou está dando save separado em cada entidade?[/quote]

separado em cada, n usei cascade, pq axei q ia dar no msm, mas se resolver meu problema posso usar (apesar q axo q n resolva).

[quote=Cabral][quote=hlds][quote=Cabral]Cara, eu tive o mesmo problema e ja li em várioas lugares a seguinte mensagem: Não é aconselhavel utilzar chave composta na modelagem do banco.

Mas… se mesmo assim você não tiver como fugir eu não tenho nada pronto aqui mas sei que você tera de usar um cara chamado “COMPOSITE-ID” no google tem algumas coisas falando dele. Veja se te ajuda.

falou!

Ricardo Cabral[/quote]

cara ate respeito sua opinao. mas dizer q n eh aconselhavel usar chave composta, eh dizer p n usar um dos relacionamentos basicos de banco, o N:N, isso na minha opiniao n existe. eu utilizei o composite id no mapeamento de pedido, pode ate ver la em cima, mas n acertei em algo

msm assim vlw a juda, por enqto vo tenatndo outras alternativas[/quote]

Cara não é opinião minha, foi apenas o que eu li nos lugares em que procurei quando tive o mesmo problema ;).

o relacionamento que voce procura no hibernate se chama “composite-id”

esse composite-id é o “bean” que voce vai criar . da uma procuradinha que eu acho que tem em portugues…

falou

[/quote]

esse composite-id q vi na documentacao do hibernate eh a tag q usei no Pedido.hbm.xml acima, eh disto q vc ta falando? se nao for, n entendi.

eu tava pensando em tirar os sets de Produto e Cliente, e dx o bean de pedido como ta. Ai faria o casatro de Cliente e Produto e dps cadastraria os Pedidos um por um com os ID de ambos, ficaria feio (por bem nao dizer “horrivel”), mas axo q funcionava.

Cabral vo procurar, mas se vc achar algo pronto sobre esse bean composite-id, coloca ai, ja q vc ja passou por tal problema, vlw…

Se eu fosse você tinha feito uma classe a mais chamada ItemPedido na qual eu teria um produto e a quantidade de tal produto, assim um pedido teria uma coleção de itemPedido.

Um cliente com uma coleção de pedidos, ou seja, one-to-many.
Um pedido tem uma coleção de itemPedido, ou seja, one-to-many.
Um itemPedido composto de um produto, ou seja, one-to-one.

Acho que isso resolveria o problema. Me corrijam se eu estiver errado.

[]'s

[quote=diego.r.araujo]Se eu fosse você tinha feito uma classe a mais chamada ItemPedido na qual eu teria um produto e a quantidade de tal produto, assim um pedido teria uma coleção de itemPedido.

Um cliente com uma coleção de pedidos, ou seja, one-to-many.
Um pedido tem uma coleção de itemPedido, ou seja, one-to-many.
Um itemPedido composto de um produto, ou seja, one-to-one.

Acho que isso resolveria o problema. Me corrijam se eu estiver errado.

[]'s
[/quote]

Pode ser, se nao tiver jeito de fazer como o meu, eu faco a sua modelagem. Mas a modelagem q fiz achei a mais simples e o problema ta na complicacao de mapear p hibernate, pois em banco eu vivo fazendo e vendo esse tipo relacionamento. O teu resolve, so q vai aumentar o numero de tabelas e de codigo tb, mas se eu n conseguir vo fazer assim msm.

ALguem teria um “hbm.xml” q mapeasse um relacionamento desse p me ajudar??? Pq no site do Hibernate n tem 1 completo, so tem trechos, e n to acertando…