Relacionamento OneToMany Hibernate não consigo entender como salvar

2 respostas
rafa_85

Bom dia!

Galera ja estou procurando isso a um dia e não consegui nada, espero que alguem possa me dar uma luz, rsrs

E o seguinte tenho uma classe de pedido de compra (PcAvulso) e uma das parcelas deste pedido (PcAvulsoParcela), para representar como esta no banco de dados ok, então um pedido tem de 1 a N parcelas. a tabela PcAvulsoParcela contem um campo coo id do pedido de compra (PcAvulso_id).

O maximo que consegui fazer e salvar um peido e apenas uma parcela, isso consigo perfeitamente.

bom vamos as classes, não vou colocar inteira para não fica muito grande.

@Entity
public class PcAvulso {

	@OneToMany(mappedBy="pcAvulso")
	List<PcAvulsoParcela> pcAvulsoParcelas = new ArrayList<PcAvulsoParcela>();

}
@Entity
public class PcAvulsoParcela {

	@ManyToOne(cascade = CascadeType.PERSIST)
	private PcAvulso pcAvulso;

}

Aqui e apenas uma classe de teste, em que a inserção com apenas uma parcela funciona

DAO<PcAvulso> pcAvulsoDAO = new DAO<PcAvulso>(session,PcAvulso.class);
		
		PcAvulso pcAvulso = new PcAvulso();

		DAO<PcAvulsoParcela> pcAvulsoParcelaDAO = new DAO<PcAvulsoParcela>(session,PcAvulsoParcela.class);

		PcAvulsoParcela pcParcela = new PcAvulsoParcela();
		PcAvulsoParcela pcParcela1 = new PcAvulsoParcela();
		
		pcParcela.setDataVencimento(new Date());
		pcParcela.setValorParcela(500.00);
		pcParcela.setDesativado(false);
		
		pcParcela1.setDataVencimento(new Date());
		pcParcela1.setValorParcela(780.00);
		pcParcela1.setDesativado(false);
		
		List<PcAvulsoParcela> pcAvulsoParcelas = new ArrayList<PcAvulsoParcela>(); 
		
		pcAvulsoParcelas.add(pcParcela);
		pcAvulsoParcelas.add(pcParcela1);
		
		pcParcela.setPcAvulso(pcAvulso);

		DAO<PcAvulsoParcela> pcAvulsoParcelaDAO = new DAO<PcAvulsoParcela>(session,PcAvulsoParcela.class);

		PcAvulsoParcela pcParcela = new PcAvulsoParcela();
		PcAvulsoParcela pcParcela1 = new PcAvulsoParcela();
		
		pcParcela.setDataVencimento(new Date());
		pcParcela.setValorParcela(500.00);
		pcParcela.setDesativado(false);
		
		pcParcela1.setDataVencimento(new Date());
		pcParcela1.setValorParcela(780.00);
		pcParcela1.setDesativado(false);
		
		List<PcAvulsoParcela> pcAvulsoParcelas = new ArrayList<PcAvulsoParcela>(); 
		
		pcAvulsoParcelas.add(pcParcela);
		pcAvulsoParcelas.add(pcParcela1);
		
		pcParcela.setPcAvulso(pcAvulso);

		destinatarioPCDAO.save(destinatarioPc);

		pcAvulsoDAO.save(pcAvulso);

		pcAvulsoParcelaDAO.save(pcParcela);
		
		tx.commit();		
		
		session.close();

Nota nao coloquei a classe inteira a penas a parte que relaciona os 2 em questão.

Agradeço muito, desde já.

2 Respostas

mgarcia

Vc precisa colocar no relacionamento @OneToMany da classe PcAvulso a opção cascade assim como vc fez na PcAvulsoParcela… essa opção que dirá ao hibernate o que fazer com os relacionamentos (salvar, não fazer nada, etc…)…

colocando essa opção no atributo pcAvulsoParcelas da classe PcAvulso, ao pedir para o hibernate gravar PcAvulso, todos os itens da lista pcAvulsoParcelas tb serão salvos

rafa_85

Obrigado mgarcia!

Realmente apenas coloquei o cascade do lado OneToMany, e salva mais de uma parcela, acho que ja tinah tentado assim mas ai acredito que o outro lado não estava com cascade.

Bom muito obrigado!

Criado 22 de março de 2010
Ultima resposta 22 de mar. de 2010
Respostas 2
Participantes 2