Annotation Hibernate para lista de produtos

2 respostas Resolvido
javahibernate
Giseli_Siqueira

Bom Dia!
Na minha classe compra tenho como atributo uma lista de produtos.
Como faço a annotation para persistir essa lista de produtos na minha tabela compra, é possível persistir uma lista completa?
Segue o codigo da minha classe Compra:

@Entity

@Table (name = compra)

public class Compra {

@Id

@GeneratedValue

private int numero;

@Column(length = 10)

private Date data;

@Column(length = 10)

private float valorCompra;

@Column(length = 10)

private int quantidadeProduto;
private List<Produto> listaDeProdutos;

public Compra() {
}

public Compra(int numero, Date data, float valor, int quantidadeProduto,
        List<Produto> listaDeProdutos) {
    this.numero = numero;
    this.data = data;
    this.valorCompra = valor;
    this.quantidadeProduto = quantidadeProduto;
    this.listaDeProdutos = listaDeProdutos;
}


public int getNumero() {
    return numero;
}

public void setNumero(int numero) {
    this.numero = numero;
}

public Date getData() {
    return data;
}

public void setData(Date data) {
    this.data = data;
}

public float getValorCompra() {
    return valorCompra;
}

public void setValorCompra(float valorCompra) {
    this.valorCompra = valorCompra;
}

public int getQuantidade() {
    return quantidadeProduto;
}

public void setQuantidade(int quantidadeProduto) {
    this.quantidadeProduto = quantidadeProduto;
}

public List<Produto> getListaDeProdutos() {
    return listaDeProdutos;
}

public void setListaDeProdutos(List<Produto> listaDeProdutos) {
    this.listaDeProdutos = listaDeProdutos;
}

}

2 Respostas

lvbarbosa
Solucao aceita

Depende. Um produto pode estar associado a mais de uma compra?

Se sim, @ManyToMany. Se não, @OneToMany. Produto também deve ser uma entidade. No primeiro caso, o framework vai criar uma join table. No segundo, a chave estrangeira vai ficar na tabela “dona” do relacionamento, que nesse caso seria o Produto. Se você quiser fazer uma referência reversa (de Produto para Compra), deve colocar a anotação reversa na classe Produto e passar um parâmetro à anotação na classe Compra, especificando o nome da variável que referencia Compra com mappedBy.

Para o caso de @ManyToMany:

class Produto {
    ...
    @ManyToMany
    List<Compra> compras;
    ...
}

class Compra {
    ...
    @ManyToMany(mappedBy = "compras")
    List<Produto> produtos;
    ...
}

Para o caso de @OneToMany:

class Produto {
    ...
    @ManyToOne
    Compra compra;
    ...
}

class Compra {
    ...
    @OneToMany(mappedBy = "compra")
    List<Produto> produtos;
    ...
}
Giseli_Siqueira

Um produto pode sim estar associado a mais de uma compra. Usei o @ManyToMany unidirecional criando uma Join Table conforme você falou lvbarbosa.
Obrigado pela ajuda! :slight_smile:

Criado 21 de junho de 2017
Ultima resposta 24 de jun. de 2017
Respostas 2
Participantes 2