[Resolvido] Problema com relacionamento @OneToOne bidirecional

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!

Na criação das tabelas:
Tente retirar a chave estrangeira “I_REQ_PAGAMENTO” da Tabela “VIAGEM” (ou retirar a chave estrangeira “I_VIAGEM” da tabela “REQUISICAO_PAGAMENTO”);
No mapeamento JPA:
Retire uma das anotações “@JoinColumn”, dependendo do que você retirou na criação das tabelas, descrito anteriormente.

A nivel de banco de dados, o relacionamento ficará apenas em uma das tabelas.
Já, no JPA, para se ter um mapeamento bidirecional, você deverá utilizar a anotação @JoinColumn em um dos lados do relacionamento.
E do outro lado, você utiliza a propriedade “mappedBy” da anotação @OneToOne, fazendo referencia ao entidade que está mapeada com o @JoinColumn.

Resumindo: Pelo que sei, você poderá deixar a chave estrangeira em qualquer uma tabelas, mas não das duas.
Veja qual maneira melhor se adapta a seu caso (acredito que seja deixar a chave estrangeira da tabela “VIAGEM” EM “REQUISICAO_PAGAMENTO”).

Espero ter ajudado!
Valeu!

Fiz estes passos que vc disse, estou fazendo uns testes e pelo que vi deu certo!
Como estava no banco legado do jeito que expliquei achei melhor não alterar mas não estava dando certo com chave dos 2 lados…

Assim que eu testar melhor confirmo aqui!

Obrigado, Richard!