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

É uma má forma de programaçao em usar tabela associativa?

To preso, porque quando uso onetomany e manytomany sempre o meu banco gera uma tabela associativa, não entendo o porque, e tava vendo isso, li não sei aonde que é bom evitar tabela associativa isso é verdade? Eu cheguei em um senso tenho um exemplo.

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>();

no manytomany o meu banco ira gerar uma tabela assim.

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

o porque ela gera essa tabela? qual o motivo dela? eu posso usar essa tabela associativa como iten? ai eu adicionario mais coluna nela. É o unico motivo que vejo ela pra usar

5 respostas

Oi Alisson, você precisa fazer os cursos de sql da alura.. Ta faltando base nessa área para você. ManyToMany só pode ser por tabela associativa.. No caso do oneToMany é falta de entendimento do hibernate mesmo.. Se vc falou que uma compra tem vários produtos(apenas um exemplo) e não disse que todo produto é de uma compra, como vc espera que o relacionamento seja feito? Não tem jeito, é por tabela associativa.

Alberto qual curso eu vou ter uma base disso? sim estou muito por fora de onetomany e manytomany. Sempre quando uso um manytomany tenho duvida, nunca sei um caminho. Voçe poderia me dar um exemplo de compra e de produto só os 2 campos mesmo como seria?

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(fetch = FetchType.LAZY)
    @JoinColumn(name = "marca_codigo")
    private Marca marca = new Marca();

Acho que o produto está correto né? porque não tem sentido eu adicionar uma fk de compra no produto correto?

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

Quais modificação você faria nessas 2 tabelas em código java? muito obrigado de novo

Acho que entendi a lógica mais ou menos alberto. Poderia ver se está no caminho certo?

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(fetch = FetchType.LAZY)
    @JoinColumn(name = "marca_codigo")
    private Marca marca = new Marca();
public class Compra implements Serializable{

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

Ai no banco gero a tabela associativa e eu fiz ela igual no java para não criar outra tabela no banco ficando assim.

public class Compra_produto implements Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long codigo;
    @ManyToOne
    @JoinColumn(name = "Compra_codigo", nullable = true)
    private Compra compra = new Compra();
    @ManyToOne
    @JoinColumn(name = "produtos_codigo", nullable = true)
    private Produto produto = new Produto();
    private Integer quantidade;

Acho que eu entendi a lógica pelo menos kkk, ou estou começando a pegar ela, já salvei a compra e tudo mais kkk.

solução!

Opa.. essa é uma forma sim :). Você pode criar a entidade e aí já fica protegido para colocar novas informações nela. Além das chaves estrangeiras.

Sim sim ela já está com entity, peguei agora tudo certo alberto, muito obrigado! Estava faltando essa parte. Sempre me perdia com essas tabela, depois de muito esforço to começando a entender ufa, muito obrigado!!!