Fórum Jpa Consulta Não Retorna Objetos Filhos #407129
26/08/2011
0
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.
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
Curtir tópico
+ 0
Responder
Posts
30/08/2011
Fausto Koga
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.
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.
Responder
Gostei + 0
09/09/2011
Dyego Carmo
Opa !
Conseguiste ? Caso positivo , por favor poderia fechar o chamado ?
Obrigado !
Conseguiste ? Caso positivo , por favor poderia fechar o chamado ?
Obrigado !
Responder
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)