Problema com JPA: Objeto @ManyToOne não é imediatamente persistido

Desde que comecei a usar o JPA, tenho problemas nas classes de entidades, especificamente nos objetos relacionados em relações de muitos para um/um para muitos.
O problema é o seguinte (os códigos estão logo abaixo): Estou persistindo dados na tabela RHM_TB_PESSOA_CONTRATO através de uma PK (a classe RhmTbPessoaContratoPK ). A persistência acontece e os dados são inseridos. O problema é que no ManagedBean, quando vou recuperar todos os dados de RHM_TB_PESSOA_CONTRATO (Select *), os objetos “gnrTbPessoa” e “gnrTbContrato” que relacionei com @ManyToOne não aparecem preenchidos (apesar de que se eu consultar a PK deles através do objeto rhmTbPessoaContratoPK, o ID estará lá preenchido). Apesar disso o objeto “rhmTbNivelCargo” vem preenchido normalmente. Se eu resetar a aplicação e dar deploy novamente, os objetos “gnrTbPessoa” e “gnrTbContrato” aparecem preenchidos.

Tenho a seguinte entidade de Contrato de pessoas:

@Entity
@NamedQueries({ @NamedQuery(name = "RhmTbPessoaContrato.findAll", query = "select o from RhmTbPessoaContrato o") })
@Table(name = "RHM_TB_PESSOA_CONTRATO")
public class RhmTbPessoaContrato implements Serializable {
    private static final long serialVersionUID = 1049159981450629896L;

    @EmbeddedId
    protected RhmTbPessoaContratoPK rhmTbPessoaContratoPK;

    @Temporal(TemporalType.DATE)
    @Column(name = "DT_CONTRATO", nullable = false)
    private Date dtContrato;

    @ManyToOne
    @JoinColumns({
                 @JoinColumn(name = "ID_NIVEL_CARGO", referencedColumnName = "ID_NIVEL_CARGO", nullable = false,
                             insertable = false, updatable = false),
                 @JoinColumn(name = "ID_CARGO", referencedColumnName = "ID_CARGO", nullable = false, insertable = false,
                             updatable = false)
        })
    private RhmTbNivelCargo rhmTbNivelCargo;
    @ManyToOne
    @JoinColumn(name = "ID_CONTRATO", referencedColumnName = "ID_CONTRATO", nullable = false, insertable = false, updatable = false)

    private GnrTbContrato gnrTbContrato;
    @ManyToOne
    @JoinColumn(name = "DS_CPF", nullable = false, insertable = false, updatable = false)
    private GnrTbPessoa gnrTbPessoa;

//Gets, sets, contrutores, hashcode e equals em seguida

E tenho a seguinte “PK” dessa mesma entidade, que estou usando para persistir os dados no banco.

@Embeddable
public class RhmTbPessoaContratoPK implements Serializable {
    @SuppressWarnings("compatibility:-4784434442176553111")
    private static final long serialVersionUID = 1L;
    
    @Basic(optional=false)
    @Column(name = "ID_CONTRATO", nullable = false)
    private Long idContrato;
    @Basic(optional=false)
    @Column(name = "DS_CPF", nullable = false)
    private String dsCpf;
    @Basic(optional=false)
    @Column(name = "ID_NIVEL_CARGO", nullable = false)
    private Long idNivelCargo;
    @Basic(optional=true)
    @Column(name = "ID_CARGO", nullable = true)
    private Long idCargo;

//Gets, sets, contrutores, hashcode e equals em seguida

E aqui embaixo Está o Select * e o persist.

[code]
@Stateless(name = “RhmPessoaContratoSessionEJB”, mappedName = “Model-RhmPessoaContratoSessionEJB”)
public class RhmPessoaContratoSessionEJBBean implements RhmPessoaContratoSessionEJBLocal {
@Resource
SessionContext sessionContext;
@PersistenceContext(unitName = “Model”)
private EntityManager em;

public RhmPessoaContratoSessionEJBBean() {
}

public <T> T persistEntity(T entity) {
    em.persist(entity);
    return entity;
}

@TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED)
public List<RhmTbPessoaContrato> rhmTbPessoaContratoFindAll() {
    return em.createNamedQuery("RhmTbPessoaContrato.findAll", RhmTbPessoaContrato.class).getResultList();
}

}[/code]

Já tentei colocar anotação de cascade.all, fetch.EAGER … mas nada funciona.
Se precisarem de mais algum código, falem que eu posto aqui.

Grato!!

Você simplesmente persiste a entidade, e aí como busca elas depois? mostre o código que faz isso

EDIT: Não estou falando da query… e sim os métodos que chamam o persist e a query

Oi Rodrigo, bom dia. Segue os métodos: (resumido, pois a classe é extensa)

@ManagedBean(name = "pessoaContratoMB")
@ViewScoped
public class PessoaContratoMB extends AbstractManagedBean {

    @EJB
    private RhmPessoaContratoSessionEJBLocal ejb;
    private List<RhmTbPessoaContrato> listConsulta;
    private RhmTbPessoaContrato entity;
    private boolean persist = true;

    @Override
    public void actionGravar(ActionEvent actionEvent) {
                if (persist) {
                    entity = ejb.persistEntity(entity);
                    gravadoMessage();
                } else {
                    entity = ejb.mergeEntity(entity);
                    alteradoMessage();
                }
            }
        }

    public void setListConsulta(List<RhmTbPessoaContrato> listConsulta) {
        this.listConsulta = listConsulta;
    }

    public List<RhmTbPessoaContrato> getListConsulta() {
        if (listConsulta == null) {
            listConsulta = ejb.rhmTbPessoaContratoFindAll();
        }

        return listConsulta;
    }

    public void setEntity(RhmTbPessoaContrato entity) {
        this.entity = entity;
    }

    public RhmTbPessoaContrato getEntity() {
        return entity;
    }
}

O objeto “listConsulta” é o que eu uso na tela para exibir os dados. E os dados recentemente persistidos tem os objetos de @ManyToOne nulos, como falei no primeiro post (com exceção do RHM_TB_NIVECARGO).