Porém quando eu faço uma requisição de pagamento eu tenho vários Itens Comprados para uma requisição e ele enviar a lista normal no momento de Salvar a requisição de pagamento, porém quando eu tenho recuperar uma requisição de pagamento eu desejo que ele traga alem dos atributos da requisição traga a lista de items que foi passada no momento que foi realizada a requisição, porém a lista vem vazia.
Deve ser por causa do FetchType.LAZY
Post sua consulta para darmos uma olhada.
Se estiver diferente, tente algo do tipo:
Query query = entityManager.createQuery("from RequisicaoPagamento rp join fetch rp.listItensComprados");
jeroqueiroz
Estou utilizando o Play! Framework e quando peço para buscar por ID ele traz todas as relações, porém neste caso ocorre o problema.
Mas posso determinar uma query para retornar, vou tentar com o exemplo de query postado abaixo.
Já retorno com um post sobre o resultado.
jeroqueiroz
Esta correta esta query?
Big_E
Entendi, uma outra sugestão (que não deveria estar aconselhando…rsrs) nesse caso é alterar o FetchType no seu mapeamento para EAGER, ficando da seguinte forma:
Isso não é aconselhando em nível de performance, pois os dados são buscados a todo momento.
Big_E
A query está correta sim.
jeroqueiroz
Usei a query exatamente como esta abaixo e não retorna nenhum item, na verdade até o objeto retorna null, pois antes retornava o objeto sem a lista, agora esta sem nada.
Hebert_Coelho
Cara, vc tem certeza que no banco tem os dados?
jeroqueiroz
Se eu mandar buscar somente pelo ID ele traz o registro e a lista sem nenhum item.
Será que pode esta ocorrendo algum erro no gravar?
Sendo q ele grava o registro.
jeroqueiroz
Quando eu crio este tipo de relacionamento ele deveria criar alguma tabela de relação no Banco?
Porque quando eu não utiliza o mappedBy ele criava uma tabela de relação entre os dois models, porém após este tipo de utilização ele não cria mais esta tabela.
O mappedBy serve apenas para identificar quem irá ficar com a chave estrangeira.
jeroqueiroz
Obrigado jakefrog,
Muito obrigado pela indicação do post, muito bom mesmo e tranquilo, pois estou tendo duvida devido não esta muito acostumando a utilizar o mappedBy.
O post mim esclareceu muito e percebi que com o código que utilizo acima ele faz isto que diz no post:
Não o mappedBy, mas a forma que esta a anotação faz este tipo relação, não criando uma tabela, mas sim criando uma coluna nos ItensComprados com o seguinte atributo RequisicaoPagamento_ID, porém olhando percebo que elas estão como null.
Será que poderia mim dar mais alguma ajuda, se é algum erro no salvar o registro.
Quando salvo uma requisição de pagamento com uma lista de items ele deveria relacionar esta coluna já com o ID da requisição de pagamento, correto?
Desde já muito obrigado.
Hebert_Coelho
Se seu relacionamento for bidirecional vc ta fazendo a.setB(b) e b.setA(a) ?
jeroqueiroz
Obrigado a todos pela ajuda.
jakefrog seu post mim ajudou muito a resolver meu problema e entender de fato o funcionamento.
O erro estava que eu não estava salvando o registro, fazendo esta inserção após salvar o billingRequest, resolveu o problema.
for(inti=0; i < itemsPurchased.size(); i++) {itemsPurchased.get(i).billingRequest=billingRequest;itemsPurchased.get(i).billingRequest.save();}