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!!