Pessoal estou com um problema.
Tenho três entidades: PedidoParcelamentoBoleto 1 ---- 1 Pedido 1 ---- 1 PedidoParcelamentoCartao. Eu queria que ao persist o Pedido, fosse persistido ou o PedidoParcelamentoBoleto ou o PedidoParcelamentoCartao, no caso o usuario optaria pelo parcelamento com cartão ou boleto, e ao persistir o pedido eu persistiria em cascata um ou outro. Alguém sabe como posso fazer isso?
Segue abaixo meu código que não preenche este requisito, só consigo persistir um pedido se popular os filhos.
Obs.: os id das filhas é o id do pai
@Entity
@Table(name = "pedidos", catalog = "business_web", schema = "")
public class Pedidos implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@Basic(optional = false)
@Column(name = "ID_PEDIDOS", nullable = false)
private Integer idPedidos = 0;
@Basic(optional = false)
@Column(name = "DATA", nullable = false)
@Temporal(TemporalType.DATE)
private Date data = new Date();
@Basic(optional = false)
@Column(name = "ID_CLIENTES", nullable = false)
private int idClientes = 0;
@Transient
private String tipoParcelamento = "";
@Basic(optional = false)
@Column(name = "TIPO_CLIENTE", nullable = false, length = 45)
private String tipoCliente = "";
@OneToOne(cascade = CascadeType.ALL, mappedBy = "pedidos", fetch = FetchType.LAZY)
private PedidoParcelamentoBoleto pedidoParcelamentoBoleto = new PedidoParcelamentoBoleto();
@OneToOne(cascade = CascadeType.ALL, mappedBy = "pedidos", fetch = FetchType.LAZY)
private PedidoParcelamentoCartao pedidoParcelamentoCartao = new PedidoParcelamentoCartao();
@OneToMany(cascade = CascadeType.ALL, mappedBy = "pedidos", fetch = FetchType.LAZY)
private List<ParcelasPagas> parcelasPagasList = new ArrayList<ParcelasPagas>();
@OneToMany(cascade = CascadeType.ALL, mappedBy = "pedidos", fetch = FetchType.LAZY)
private List<BoletosPagos> boletosPagosList = new ArrayList<BoletosPagos>();
@OneToMany(cascade = CascadeType.ALL, mappedBy = "pedidos", fetch = FetchType.LAZY)
private List<ItemPedidos> itemPedidosList = new ArrayList<ItemPedidos>();
//omitido
public class PedidoParcelamentoBoleto implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@Basic(optional = false)
@Column(name = "ID_PEDIDOS", nullable = false)
private Integer idPedidos = 0;
@Basic(optional = false)
@Column(name = "DIA_FATURA", nullable = false)
private int diaFatura = 0;
@Basic(optional = false)
@Column(name = "VALOR", nullable = false)
private double valor = 0;
@JoinColumn(name = "ID_PARCELAMENTO_BOLETO", referencedColumnName = "ID_PARCELAMENTO_BOLETO", nullable = false)
@ManyToOne(optional = false, fetch = FetchType.LAZY)
private ParcelamentoBoleto parcelamentoBoleto = new ParcelamentoBoleto();
@JoinColumn(name = "ID_PEDIDOS", referencedColumnName = "ID_PEDIDOS", nullable = false, insertable = false, updatable = false)
@OneToOne(optional = false,fetch = FetchType.LAZY)
private Pedidos pedidos;
//omitido
public class PedidoParcelamentoCartao implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@Basic(optional = false)
@Column(name = "ID_PEDIDOS", nullable = false)
private Integer idPedidos;
@Basic(optional = false)
@Column(name = "VALOR", nullable = false)
private double valor = 0;
@JoinColumn(name = "ID_PEDIDOS", referencedColumnName = "ID_PEDIDOS", nullable = false, insertable = false, updatable = false)
@OneToOne(optional = false, fetch = FetchType.LAZY)
private Pedidos pedidos;
@JoinColumn(name = "ID_PARCELAMENTO_CARTAO", referencedColumnName = "ID_PARCELAMENTO_CARTAO", nullable = false)
@ManyToOne(optional = false, fetch = FetchType.LAZY)
private ParcelamentoCartao parcelamentoCartao = new ParcelamentoCartao();;
@JoinColumn(name = "ID_CARTOES", referencedColumnName = "ID_CARTOES", nullable = false)
@ManyToOne(optional = false, fetch = FetchType.LAZY)
private Cartoes cartoes = new Cartoes();
//omitido