Annotation Hibernate para lista de produtos

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;
}

}

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;
    ...
}
1 curtida

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: