Boa tarde!
Vasculhei todo o fórum e testei tudo o que encontrei mas nenhuma resposta resolveu meu caso.
Estou com um problema no 3o passo do relacionamento:
1- Incluir Pai (campo id_filho e fk nulo, pois ainda não existe)
2- Incluir Filho (campo id_pai e fk com o novo código do pai )
3- Atualizar Pai inserindo novo código em id_filho (fk)
15:18:39,195 ERROR [org.jboss.as.ejb3.invocation] (http-/0.0.0.0:8080-3) JBAS014134: A Invocação EJB falhou no ViagemEImpl do componente para o public abstract void com.x.viagem.ViagemE.altera(com.x.ent.Viagem) do método: Campo obrigatório não informado (requisicao_pagamento.i_viagem)
TABLE "VIAGEM"
( "I_VIAGEM" NUMBER(*,0) NOT NULL ENABLE,
"I_REQ_PAGAMENTO" NUMBER(*,0),
CONSTRAINT "PK_VIAGEM" PRIMARY KEY ("I_VIAGEM")
CONSTRAINT "FK_I_REQ_PAGAMENTO" FOREIGN KEY ("I_REQ_PAGAMENTO")
REFERENCES "REQUISICAO_PAGAMENTO" ("I_REQ_PAGAMENTO") ;
TABLE "REQUISICAO_PAGAMENTO"
( "I_REQ_PAGAMENTO" NUMBER(*,0) NOT NULL ENABLE,
"I_VIAGEM" NUMBER(*,0) NOT NULL ENABLE,
CONSTRAINT "PK_REQ_PAG" PRIMARY KEY ("I_REQ_PAGAMENTO"),
CONSTRAINT "FK_I_VIAGEM_REQ_PAG" FOREIGN KEY ("I_VIAGEM")
REFERENCES "VIAGEM" ("I_VIAGEM"));
@Entity
@Table(name="REQUISICAO_PAGAMENTO")
public class RequisicaoPagamento implements Serializable{
private static final long serialVersionUID = 1L;
@Id
@Column(name = "I_REQ_PAGAMENTO")
@SequenceGenerator(name = "RequisicaoPagamento_SEQ", sequenceName = "ID_REQUISICAO_PAGAMENTO_SEQ", allocationSize = 1)
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "RequisicaoPagamento_SEQ")
private Integer IReqPagamento;
@OneToOne(mappedBy="requisicaoPagamento",cascade={CascadeType.PERSIST,CascadeType.MERGE})
@JoinColumn(name="I_VIAGEM", updatable=true, insertable=true)
private Viagem viagem;
@Entity
@Table(name="VIAGEM")
public class Viagem implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@Column(name = "I_VIAGEM")
@SequenceGenerator(name = "Viagem_SEQ", sequenceName = "ID_VIAGEM_SEQ", allocationSize = 1)
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "Viagem_SEQ")
private Integer IViagem;
@OneToOne(cascade=CascadeType.ALL)
@JoinColumn(name="I_REQ_PAGAMENTO", updatable=true)
private RequisicaoPagamento requisicaoPagamento;
@TransactionAttribute(TransactionAttributeType.REQUIRED)
public void altera(Viagem viagem) {
viagemBD.altera(viagem); // salva
RequisicaoPagamento requisicaoPagamento = new RequisicaoPagamento();
requisicaoPagamento.setViagem(viagem);
viagem.setRequisicaoPagamento(requisicaoPagamento);
viagem = viagemBD.altera(viagem); // salva
Pergunta 1: Posso ter este relacionamento com FKs um do outro precisando fazer esses 3 passos?
Pergunta 2: A Persistência faz isso automaticamente de salvar um após outro e depois atualizar no outro a fk restante?
Obrigado!