Still not enough information; with all info you provided I cannot trace from start (here) to the actual persisted variable.
In what line does the exception occur?
Where does pessoa come from?
What does the getPessoaFisica() do?

The "setPessoa" is the method (I assume) where the value is set; how does that look? Does it actually set the value or are you maybe setting a local variable instead of an instance?

If the objects have values, then they should be persisted. One possible cause could be that there is a another instance of the object.
Since you get the error at the commit, it is unlikely that you try to persist something before it is "complete".

> Back in the Table the id also increments.

That would be the assigning of the PK, it does not mean the FK's was assigned as well...

> I can mail you the debug info if that is required.

Maybe it is wise to first build a small running example outside the application. Just a main which mimickes the button's behavior, in that way you contain the problem. See if it occurs there as well.

> Maybe it is wise to first build a small running example outside the
application. Just a main which mimickes the button's behavior, in that way you
contain the problem. See if it occurs there as well.

Your suggestion helped.

I found a bug em.merge(pessoaFisica) was resulting a new object which was
resulting in a null object in pessoa. So I modifed the code. Now it
doesn't give me any error but it doesn't post anything in the table either.