Hibernate OneToMany [Resolvido]

3 respostas
R

tenho 3 produtos novos e 1 venda nova

produtos.add(produto1);
produtos.add(produto2);
produtos.add(produto3);
venda.setProdutos(produtos);
vendaDAO.save(venda);

o hibernate salva todos os 3 produtos e a venda no banco de dados…
no entando não esta setando na tabela produto a referência a venda.
Na tabela Produto o campo venda_id fica nulo, pq?

3 Respostas

silvionetto

Você já tentou cria um construtor para produto passando a venda.
Ex:

public Produto(){}
public Produto(Venda venda){
    setVenda(venda);
}

Que ai quando salvar o produto o hibernate deve colocar o id da venda no produto.

R

testei não deu certo....olha só os códigos

@Entity
public class ServiceOrder {
	
	@Id
	@GeneratedValue		
	private Integer id;
	
       @OneToOne
       @JoinColumn(name="customer_id")
       private Customer customer;
    
       @OneToMany(mappedBy = "serviceOrder", fetch = FetchType.LAZY)
       @Cascade(CascadeType.ALL) 
       private List<ServiceOrderDevice> devices;
   ...
}
@Entity
public class ServiceOrderDevice {
	
	@Id
	@GeneratedValue		
	private Integer id;
	
	@ManyToOne (fetch=FetchType.EAGER)
	@JoinColumn (name="serviceorder_id")
	@Cascade (CascadeType.ALL)
	private ServiceOrder serviceOrder;

       @OneToOne
       @JoinColumn(name="device_id")	
	private Device device;
	
	public ServiceOrderDevice() {
	}
	public ServiceOrderDevice(ServiceOrder serviceOrder) {
		setServiceOrder(serviceOrder);
	}      
    ...
}

e o método que salva

public String save() {		
		ServiceOrderDevice serviceOrderDevice = new ServiceOrderDevice(); // dispositivo teste
		List<ServiceOrderDevice> deviceList = new ArrayList<ServiceOrderDevice>();
		deviceList.add(serviceOrderDevice);
		serviceOrder.setDevices(deviceList);
		serviceOrderDAO.save(serviceOrder);
		return insert();
	}

não está setando o campo serviceorder_id na tabela ServiceOrderDevice...

grato

R

consegui resolver

era o método

public void setDevices(List<ServiceOrderDevice> devices) {
    this.devices = devices;
    //trecho de código q acrescentei
    for(ServiceOrderDevice sod: devices)
        sod.setServiceOrder(this);
}

não sei se isso é um armego ou se é o correto… :stuck_out_tongue:

abraços

Criado 16 de julho de 2008
Ultima resposta 17 de jul. de 2008
Respostas 3
Participantes 2