Jpa Consulta Não Retorna Objetos Filhos

Java

26/08/2011

Galéra,
Tenho um relacionamento entre duas classes (Pergunta e Alternativa). Quando cadastro a pergunta ela é inclusa no banco com sucesso, em seguida faço o mesmo para a alternativa. Porém ao recuperar esta pergunta a lista de alternativas não retorna os objetos que acabei de inserir. Eles so aparecem quando encerro a aplicação e executo novamente.
O que pode esta acontecendo.

Segue trecho de código

Pergunta (Persist)
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "fdIdPergunta")
    private List<Resposta> respostaList;

Alternativa (Persist)
    @JoinColumn(name = "FD_ID_PERGUNTA", referencedColumnName = "FD_ID")
    @ManyToOne(optional = false)
    private Pergunta fdIdPergunta;

Pergunta DAO
...outros metodos
        em.persist(pergunta);

Altenativa DAO
...trechos oculto
        alter.setFdIdPergunta(pergPai);
        em.persist(alternativa);

Metodo que recupera uma lista de perguntas onde os objetos do tipo Alternativa retornam sem registros
List <Pergunta> findPerg = em.createQuery("select p from Pergunta p inner join fetch p.alternativaList where p.fdIdQuestionario = ?1 order by p.fdNumQuestao").setParameter(1, pergByQuest).getResultList();

Este objeto findPerg retorna com as devidas perguntas, porém os objetos filhos (Alternativa) voltam todos sem registros vinculados. Como resolvo isto?

Obrigado.
       
Alexandre Pires

Alexandre Pires

Curtidas 0

Respostas

Fausto Koga

Fausto Koga

26/08/2011

Olá,

Você tentou dar uma refresh na sua entidade?

Seria algo assim:

em.refresh(entidade);

Com "em" sendo um entityManager e "entidade" sendo seu objeto pergunta.

VocÊ também pode tentar o flush:

em.flush();

Que "força" enviar para o banco aquilo que está na sessão do hibernate (sincroniza).

Configura também para o jpa mostrar as queries no console assim vc sabe o que está acontecendo e quando, no hibernate é assim:

<property name="hibernate.show_sql" value="true"/>
<property name="hibernate.format_sql" value="true"/>

Também confira se não está chamando o em.detach ou em.clear, que pode causar estes problemas.


E por último, crie um entityManager, inicie a transação e insira a pergunta e alternativas. Entao dê um commit e feche o entityManager. Então crie um novo entityManager e faça a consulta, antes de fechar o entityManager já chame o pergunta.getAlternativas() e veja se retorna corretamente.



Espero que ajude, abs.
GOSTEI 0
Dyego Carmo

Dyego Carmo

26/08/2011

Opa !

Conseguiste ? Caso positivo , por favor poderia fechar o chamado ?

Obrigado !
GOSTEI 0
POSTAR