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/