Datatable com três tabelas e com relacionamento OneToMany

1 resposta
javajpafront-end
dymitrios

Bom dia prezados,

Estou iniciando um projeto com JPA2, JSF e PRIMEFACES.

Porém como ainda sou inexperiente nessa metodologia que o JPA proporciona. Estou apanhando bastante.

Bom vamos lá ao problema.

Tenho três classes de entidade do banco de dados.

Reccartao, Acecartao, Vdacar.
Relacionamentos: Reccartao OneToMany Vdacar; Reccartao OneToMany Acecartao.

Fiz a seguinte consulta e retorna corretamente a Reccartao com seus dois relacionamentos.

protected EntityManager manager;

public Collection listar() {
CriteriaBuilder builder = manager.getCriteriaBuilder();
    CriteriaQuery<Reccartao> criteria = builder.createQuery(Reccartao.class);
            
    Predicate predicate = builder.and();
    Root<Reccartao> from = criteria.from(Reccartao.class);      
    predicate = builder.gt(from.get("reccartaoPK").get("idrec"), 7528);
    TypedQuery<Reccartao> typedQuery = manager.createQuery(

            criteria.select(from).where(predicate)

    );
    

    return typedQuery.getResultList();

}

Porém quando vou popular ela no datatable só me aparece pra puxar a lista dos relacionamentos. Não estou conseguindo puxar os atributos.

Eu quero fazer ele retornar no datatable a seguinte consulta:
(“select *
from
reccartao
left join acecartao
on acecartao.empresa=reccartao.empresa
and acecartao.idrec = reccartao.idrec
and acecartao.cartao=reccartao.cartao
left join vdacar
on vdacar.empresa=reccartao.empresa
and vdacar.idrec = reccartao.idrec
and vdacar.cartao=reccartao.cartao”)

Tenho que mudar os relacionamentos das entidades? Porém vai ficar diferente do que é realmente o relacionamento na arquitetura da tabela.
Como tratar isso?

Classe Reccartao

@Entity

@Table(name = Reccartao)

public class Reccartao implements Serializable {
private static final long serialVersionUID = 1L;
@EmbeddedId
private ReccartaoPK reccartaoPK;
@Column(name = "DTRECBTO")
@Temporal(TemporalType.DATE)
private Date dtrecbto;    
@Column(name = "VALOR")
private Double valor;
@Column(name = "REDE")
private String rede;
@Column(name = "TPTRANSACAO")
private Short tptransacao;
@Column(name = "AUTORIZACAO")
private String autorizacao;
@Column(name = "NSU")
private String nsu;
@Column(name = "PARCELAS")
private Short parcelas;
@Column(name = "NOMEADM")
private String nomeadm;
@Column(name = "USERID")
private String userid;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "reccartao")
private Collection<vdacar> vdacarLista;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "reccartao")
private Collection<acecartao> acecartaoLista;

/getters and setters/

1 Resposta

I

Não entendi direito mas vamos lá
O acesso é um collection exatamente pois o relacionamento é 1:n
Para que ele seja o objeto da tabela tem que ser 1:1

Criado 17 de dezembro de 2016
Ultima resposta 21 de dez. de 2016
Respostas 1
Participantes 2