Boa tarde, sou iniciante e tenho muitas duvidas.
Vou coloca-las aos poucos para não ficar muito emboladas.
Estou fazendo um aplicativo para facul de um controle de uma loja de materiais de construcao.
Tenho dúvidas na hora de fazer os relacionamentos, onde colocar uma para muitos, muitos para um, muitos para muitos.
Esta certo afirmar que UM fornecedor para muitas compras? ja que para cada compra realizada tera um fonecedor.
Realmente preciso colocar o relacionamento na classe fornecedor?
Meu caro, não tente pensar estruturado tratando de objetos. Nem vice-versa.
Isole as coisas.
Cada compra será feita de um fornecedor? Essa compra se refere a uma NF?
Cada fornecedor poderá estar em várias compras. Mas cada compra só pdoerá ter um forncecedor, não?
Relacionamento um para muitos.
No banco, você colocaria uma FK de fornecedor em Compra e boas. Todas as vezes que quisesse encontrar um fornecedor, a partir da venda, conseguiria e, caso contrário, pesquisasse as compras por fornecedor, também.
O mapeamento unidirecional permite que apenas a classe que contém esse mapeamento realize as ações. Por isso, precisa do mapeamento bidirecional (caso queira deletar fornecedor ou compra, precisará destes dados).
Eu entendo que um item_venda pode conter apenas um produto, embora a quantidade seja variável (1 ou mais).
Assim sendo, por que um relacionamento muitos para um?
pesquise pelo mappedBy aí você consegue fazer o mapeamento unidirecional
O relacionamento é muitos para um (muitos itens_venda para um produto), pois podera ter varios itens de venda com o mesmo produto, em vendas diferentes.
Estou certo ou errado (por favor pode falar).
O mappedBy é usado em relacionamentos @OneToMany ? Estou certo?
ele é uma chave estrangeira, que pega o valor da classe do outro lado do relacionamento?
Nesse caso, onde um item_venda podera conter apenas um produto, mas com quaantidades entre 1 e infinito.
Qual o relacionamento usar?
@ManuToOne OU @OneToMany?
Estou perdido…
Mais uma vez muito obrigado pela resposta e atenção.
Você está confundindo as coisas.
Se formos analisar mais adequadamente, item_venda, é, nada mais, que um produto.
Cada produto pode estar em n vendas. Cada venda pode ter n produtos.
Como o relacionamento n : n prevê a criação de uma tabela associativa, você precisa mapear isso em ambos os lados.
Como você pretende colocar um outro objeto entre as classes envolvidas, isso muda um pouco.
Eu optaria por abordar desta forma
O hibernate irá criar (caso você tenha configurado para isso) as tabelas
vendas
produtos
item_venda
Onde, em vendas serão armazenadas todas as vendas.
Em produtos, todos os produtos.
E em item_venda todas as associações entre eles.
item_venda terá as columnas venda_id e produto_id, referenciando o id de venda e de produto, respectivamente.
ok, entendi, foi muito claro.
E se eu quiser colocar mais colunas nessa terceira tabela que o hibernate ira criar, colunas como, quantidade, valor total e talvez valor do produto teria como?
Porque quando se tem um relacionamento muitos para muitos o hibernate cria uma tabela associativa automaticamente, tem como adicionar campos a essa tabela? Se sim, como e onde eu especifico esses campos?
Eu nao entendi muito bem, pelo que eu vi, o exemplo usa AssociationOverrides.
No exemplo nao esta sendo usado ManyToMany.
Tem como voce me mostrar como poderia fazer isso com minhas classes Venda, Intes_venda e produtos?
A classe itens_venda sera a classe criada pelo hibernate para assiciar uma venda a um produto.
Preciso de mais 2 campos na classe itens_venda, quantidade e valor total.