Ainda não tem acesso? Estude com a gente! Matricule-se
Ainda não tem acesso? Estude com a gente! Matricule-se

Solucionado (ver solução)

JPQL COMO FAZER UMA JUNÇÃO COM UMA LISTA.

Opa boa noite a duvida pode ser boba, más como seria a JPQL com os seguintes caompos.

@OneToMany(fetch = FetchType.LAZY, mappedBy = "compra")
    private List<ParcelaCompra> parcelaCompras = new ArrayList<ParcelaCompra>();

Depois.

@ManyToOne
    @JoinColumn(name = "compra_codigo")
    private Compra compra = new Compra();

Tenho uma relação bidiricional , quero fazer um select que tras a lista compraParcela com suas parcelas, meu jpql tá assim, queria implementar isso.

@SuppressWarnings("unchecked")
    public List<Compra_produto> lista() {
        return manager
                .createQuery(
                        "Select cp from Compra_produto cp join fetch cp.compra join fetch cp.produto")
                .getResultList();
    }

Falta implementar o jpql.

E como faria para navegar como orientação objeto do meu html? Tipo que que o meu table mostrasse uma coluna da minha tabela parcelaCompra.

<p:dataTable reflow="true"
                            emptyMessage="Nenhuma compra encontrada" paginator="true"
                            rows="5" value="#{compraBean.listaCompraProdutos}" var="clcp">
                            <f:facet name="header">
                                Tabela da compra
                            </f:facet>
                            <f:facet name="footer">
                                <p:commandButton value="Inserir" icon="fa fa-fw fa-plus"
                                    style="width:100px" styleClass="secondary"
                                    actionListener="#{compraBean.novo}" update=":formularioNovo"
                                    oncomplete="PF('inserir').show();" />
                            </f:facet>
                            <p:column headerText="Código" filterBy="#{clcp.compra.codigo}">
                                <h:outputLabel value="#{clcp.compra.codigo}" />
                            </p:column>
                            <p:column headerText="Data" filterBy="#{clcp.compra.data}">
                                <h:outputLabel value="#{clcp.compra.data}"
                                    converter="dataConverter" />
                            </p:column>
                            <p:column headerText="Valor restante"
                                filterBy="#{clcp.compra.precoPagar}">
                                <h:outputLabel value="#{clcp.compra.precoPagar}">
                                    <f:convertNumber type="currency" pattern="R$ #0.00"
                                        currencySymbol="R$" locale="pt_BR" />
                                </h:outputLabel>
                            </p:column>
                            <p:column headerText="Preço pago"
                                filterBy="#{clcp.compra.precoPago}">
                                <h:outputLabel value="#{clcp.compra.precoPago}">
                                    <f:convertNumber type="currency" pattern="R$ #0.00"
                                        currencySymbol="R$" locale="pt_BR" />
                                </h:outputLabel>
                            </p:column>
                            <p:column headerText="Valor total"
                                filterBy="#{clcp.compra.precoTotal}">
                                <h:outputLabel value="#{clcp.compra.precoTotal}">
                                    <f:convertNumber type="currency" pattern="R$ #0.00"
                                        currencySymbol="R$" locale="pt_BR" />
                                </h:outputLabel>
                            </p:column>
                            <p:column headerText="Fornecedor"
                                filterBy="#{clcp.fornecedor.nome}">
                                <h:outputText value="#{clcp.fornecedor.nome}" />
                            </p:column>

ALGO COMO.

 <p:column headerText="Codigo parcela"
                                filterBy="#{clcp.compra.parcelaCompras.codigo}">
                                <h:outputText value="#{clcp.compra.parcelaCompras.codigo}" />
                            </p:column>

Deu para entender? Como to passando um atributo do tipo List, no collumn pode dar erro, Como seria feito? Isso é apenas um teste, que quero fazer em outra parte do projeto..

1 resposta
solução

Fala Alisson! blz??

Vamos lá, são duas dúvidas ai. A primeira do Join Fetch:

Como vc está usando o mappedBy vc não deveria ter uma entidade compra_produto. Se vc dropar a tabela e subir o banco de novo o JPA não vai mais criar essa entidade intermediaria. O mappedBy só funciona se as tabelas não estiverem criadas. Com isso na hora que vc fizer o select, vai ser pelo Compras fazendo um join fetch em produtos. Isso deve resolver o seu problema. Não faz muito sentido nesse caso fazer 2 join fetch na entidade intermediaria.

A segunda dúvida do jsf: vc precisaria usar alguma tag de selecão multipla, por exemplo, dataList ou colocar um forEach chamando cada dado da Lista ou se couber na sua aplicação fazer um outro dataTable com essas informações.

Qualquer dúvida estamos ai