Ola a todos.
Estou com um problema aqui com o JPA e não tenho nem ideia de como resolve-lo.
É o seguinte, na minha aplicação eu tenho um contrato, e este contrato possui varios extratos.
Estou fazendo assim : dentro do meu bean de extrato eu coloco um contrato e faço o relacionamento de ManyToOne la.
E dentro do contrato eu coloco um relacionamento de OneToMany.
Mas ae na hora da busca,olhem só o que acontece:
Se um cliente tem varios contratos,(vamos supor 2 contratos) os dados do 1° contrato estão indo para o segundo.
Por Exemplo:
Se o contrato 1 tem 3 extratos sendo eles 1,2,3.
e o contrato 2 tem 6 extratos sendo eles 4,5,6,7,8,9.
Na hora que eu faço a busca no banco, o resultado é o seguinte:
contrato 1 traz os valores 1,2,3.
e o contrato 2 traz os valores 1,2,3,7,8,9.
Não tenho nem ideia do pq disso.
Alguém pode me ajudar ??
Aqui está o código.
Bean Contrato.
@Entity
@Table(name="kg_contrato")
public class KgContrato {
@Column(name="carteira")
private String carteira;
@Id
@Column(name="bordero")
private int bordero;
@Column(name="totalitens")
private String totalItens;
@Temporal(TemporalType.TIMESTAMP)
@Column(name="dataaquisicao",nullable = false)
private Date dataAquisicao ;
@Column(name="cedente")
private int cedente;
@Column(name="valorbordero")
private String valorBordero;
@Temporal(TemporalType.TIMESTAMP)
@Column(name="dataatualizacao",nullable=false)
private Date dataAtualizacao ;
@OneToMany(mappedBy="contrato", cascade=CascadeType.ALL, fetch=FetchType.LAZY)
private List<KgExtrato> kgextratos = new ArrayList<KgExtrato>();
// gets and sets
// hashcode equals
}
Bean Extrato
@Entity
@Table(name="kg_extrato")
public class KgExtrato {
@EmbeddedId
private ChaveKgExtrato chaveCompostaKgExtrato ;
@Column(name="bordero")
private int bordero;
@Column(name="cedente")
private int cedente;
@Temporal(TemporalType.TIMESTAMP)
@Column(name="dataaquisicao", nullable = false)
private Date dataAquisicao ;
@Column(name="inscricaosacado")
private String inscricaoSacado;
@Column(name="nomesacado")
private String nomeSacado;
@Temporal(TemporalType.TIMESTAMP)
@Column(name="datavencimento", nullable = false)
private Date dataVencimento;
@Column(name="numerotitulo")
private String numeroTitulo;
@Column(name="valortitulo")
private String valorTitulo;
@Column(name="carteiraboleto")
private String carteiraBoleto;
@Column(name="grupotipocarteira")
private int grupoTipoCarteira;
@ManyToOne(fetch=FetchType.LAZY,targetEntity=KgContrato.class)
@JoinColumn( name="bordero", referencedColumnName="bordero", insertable=false, updatable=false)
private KgContrato contrato;
// gets and sets
// hash code e equals
}
Metodo de busca no banco.
public List<KgExtrato> carregaExtratosPorBordero (int codigoBordero,Date date,Date date2, String codigoProduto){
// EntityManager em = emf.createEntityManager();
StringBuffer sb = new StringBuffer();
List<KgExtrato> resposta = new ArrayList<KgExtrato>();
if(codigoProduto.equals("")){
sb.append("select distinct kgextrato from KgExtrato kgextrato");
sb.append(" where kgextrato.bordero = '" + codigoBordero + "'");
sb.append(" and kgextrato.dataAquisicao between '"+ DATAUTILS.getAno(date) + "/" + DATAUTILS.getMes(date) + "/" + DATAUTILS.getDia(date) +"' and " + "'"+ DATAUTILS.getAno(date2) + "/" + DATAUTILS.getMes(date2) + "/" + DATAUTILS.getDia(date2)+"'");
sb.append(" order by kgextrato.chaveCompostaKgExtrato.borderoItem");
}else{
sb.append("select distinct kgextrato from KgExtrato kgextrato");
sb.append(" where kgextrato.bordero = '" + codigoBordero + "'");
sb.append(" and kgextrato.dataAquisicao between '"+ DATAUTILS.getAno(date) + "/" + DATAUTILS.getMes(date) + "/" + DATAUTILS.getDia(date) +"' and " + "'"+ DATAUTILS.getAno(date2) + "/" + DATAUTILS.getMes(date2) + "/" + DATAUTILS.getDia(date2)+"'");
sb.append(" and kgextrato.produtoTitulo = '" +codigoProduto+ "'");
sb.append(" order by kgextrato.chaveCompostaKgExtrato.borderoItem");
}
/*
SELECT * FROM kg_extrato WHERE kg_extrato.bordero = '57138'
and kg_extrato.dataaquisicao BETWEEN '2008/10/15' and '2008/10/15'
*/
Query query = OperacoesPersistencia.currentEntityManager().createQuery(sb.toString());
try {
resposta = (List<KgExtrato>)query.getResultList();
} catch (Exception e) {
resposta = null;
}
return resposta;
}
É isso ae pessoal.
Quem puder me ajudar, ficarei grato.
Obrigado.