Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Duvida com o meu relacionamento com tabelas

Opa beleza? Eu abri um tópico ontem a noite parecido com esse, só que não tiro a minha duvida ainda. Aquele la irei fechar e colocar um link para este como resolvido.

Chego na parte que eu realmente quero entender como funciona o relacionamento oneToMany e ManyToOne. Porque tenho no meu produto a tabela desse jeito.


    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long codigo;
    private String nome;
    private Integer quantidade;
    private Double preco;
    private Double precoAVender;
    @OneToMany
    private List<Fornecedor> fornecedores = new ArrayList<Fornecedor>();
    @OneToOne
    @JoinColumn(name = "marca_codigo")
    private Marca marca = new Marca();

Reparem que eu coloquei um OneToMany aqui no meu fornecedores porque a lógica pra mim é que sempre um produto pode ter varios fornecedores diferentes, ou seja varios fornecedores tem o mesmo produto! Mais fazendo dessa forma com essa anotação a minha tabela de produto só vai ter a fk da marca e eu queria que no meu produto tivesse a fk da marca e do fornecedor, dessa forma não é possivel fazer? Quando coloca OneToMany sempre a outra tabela vai receber o lado "forte" da relação? Porque fiz desse jeito e oque aconteceu foi que na tabela fornecedor tem a fk do produto, mas queria ao contrario...


    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long codigo;
    private String nome;
    private Integer quantidade;
    private Double preco;
    private Double precoAVender;
    @OneToMany
    @JoinColumn(name = "fornecedor_codigo")
    private List<Fornecedor> fornecedores = new ArrayList<Fornecedor>();
    @OneToOne
    @JoinColumn(name = "marca_codigo")
    private Marca marca = new Marca();
@Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long codigo;
    private String celular;
    private String nome;
    private String email;
    private String razaoSocial;
    @ManyToOne
    private Produto produto = new Produto();

Alguma solução para o meu "problema"?

2 respostas
solução!

Não tem solução. O lado com manyToone vai levar a chave. Você não consegue, na tabela de produtos, ter várias chaves para fornecedores. A outra solução é vc ter a tabela de relacionamento, que é o que vai ser criado se você não usar o mappedBy.

Então o lado one sempe leva a chave alberto? ok bom saber, Então tenho um caso aqui que agora comecei a entender eu acho, olha.

public class Produto implements Serializable{

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long codigo;
    private String nome;
    private Integer quantidade;
    private Double preco;
    private Double precoAVender;
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "fornecedor_codigo")
    private Fornecedor fornecedor = new Fornecedor();
    @ManyToOne
    @JoinColumn(name = "marca_codigo")
    private Marca marca = new Marca();
public class Compra implements Serializable{

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long codido;
    private Double precoTotal;
    private Calendar Data = Calendar.getInstance();
    @ManyToMany
    private List<Produto> produtos = new ArrayList<Produto>();

Na minha tabela de compra quando faço o meu manytomany ele cria automaticamente uma tabela no banco assim, com o nome compra_produto, e nela tem 2 fk. Então essa tabela eu podia fazer a compra nessa tabela correto? passando a quantidade de produto preço e deixando so o valor total na minha tabela compra. Essa tabela podia usar como uma tabela de item? Seria essa a lógica?

Compra_codido    bigint(20)    NO    MUL        
produtos_codigo    bigint(20)    NO    MUL