2
respostas

Persistir objeto com lista

Olá pessoal,

Tenho uma entidade chamada TabelaCliente, na qual seria o cabeçalho do relacionamento entre clientes e produtos. Nessa entidade, tenho um atributo (uma outra entidade) chamado produtos, no qual é a relação dos produtos que fazem parte desta tabela.

Gostaria que, ao persistir a entidade TabelaCliente, ele persistisse também os seus itens relacionados. Utilizei o parâmetro cascade = CASCADE.ALL no relacionamento do atributo produtos, porém na tabela dos produtos ele não inseriu o código da tabela, deixando os itens órfãos.

Alguém já passou por isso?

Obrigado,

2 respostas

Oi Ismael,

Você precisa colocar na sua classe Produtos o relacionamento:

@OneToMany(mappedBy="produto") private List clientes;

dessa forma, o provedor de persistência saberá que a coluna de JOIN deve estar na tabela Cliente.

Olá Otávio..

Cara, então, no caso criei uma entidade chamada TabelaCliente, no qual é armazenado o cliente e data de início e término, bem como uma entidade chamada ClienteProduto, que possui a TabelaCliente, o Produto e o valor da tabela.

Nesse caso, como ficaria?

Essas são as definições das minhas entidades:

@Entity
public class TabelaCliente implements Serializable {

    private static final long serialVersionUID = -7223499247611524735L;
    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "tabela_cliente_sequence")
    @SequenceGenerator(name = "tabela_cliente_sequence", sequenceName = "tabela_cliente_sequence")
    private int codigo;
    private Calendar dataInicial;
    private Calendar dataFinal;
    @Null
    @ManyToOne
    private Cliente cliente;
    @OneToMany(mappedBy = "tabelaCliente")
    private List<ClienteProduto> produtos;
public class ClienteProduto implements Serializable {

    private static final long serialVersionUID = 916792558890873578L;
    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "cliente_produto_sequence")
    @SequenceGenerator(name = "cliente_produto_sequence", sequenceName = "cliente_produto_sequence")
    private int codigo;
    @ManyToOne
    private Produto produto;
    private BigDecimal valor;
    private Calendar data;
    @ManyToOne
    TabelaCliente tabelaCliente;

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software