maniacs
Outubro 26, 2007, 10:15am
#1
O mapeamento esta correto e sem erros… mas:
Adicionei * no lugar dos campos para melhor visualização
Hibernate: /* load com.ibs.model.Cliente */ select * from CLIENTE cliente0_ where cliente0_.CPFCNPJ=?
Hibernate: /* load one-to-many com.ibs.model.Cliente.clienteLimite */ select * from CLIENTE_LIMITE clientelim0_ where clientelim0_.CPFCNPJ=?
/* System.out */
[]
onde CPFCNPJ é a chave das 2 tabelas e a tabela Cliente_limite tem uma secudary SQ_CLIENTE_LIMITE
Não retorna nada
Cliente c = (Cliente) session.load(Cliente.class, "027507");
log.debug("ClienteLimite: " + c.getClienteLimite());
E na mão retorna a lista
Criteria criteria = session.createCriteria(ClienteLimite.class);
criteria.add(Restrictions.eq("CPFCNPJ","027507"));
List<ClienteLimite> clienteLimite = criteria.list();
log.debug("ClienteLimite: " + clienteLimite );
os mapeamentos são grandes dai não sei se colocalos aqui seria bom…
Sera que da para pegar o valor que o hibernate passa no ‘?’ da query sql ?
Por ex: o campo CPFCNPJ que é a chave é uma string se ele passar ‘027507’ como int ele não retorna nada mesmo …
maniacs
Outubro 26, 2007, 1:18pm
#2
Fiz uma mapeamento menos para mostrar para vocês …
// MiniCliente
@Id
@Column(name="CPFCNPJ", unique=true, length=14, nullable=false)
private String CPFCNPJ;
@Column(name="CD_ESTADO", length=2, nullable=false)
private String CD_ESTADO;
@Column(name="CD_CIDADE", length=9, nullable=false)
private Integer CD_CIDADE;
@Column(name="NM_CLIENTE", length=60)
private String NM_CLIENTE;
@OneToMany(mappedBy = "miniCliente")
private List<MiniClienteLimite> miniClienteLimites;
//MiniClienteLimite
@Id
@Column(name="SQ_SEQUENCIA", unique=true, nullable=false)
private Integer SQ_SEQUENCIA;
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name="CPFCNPJ")
private MiniCliente miniCliente;
A ligacao é feita pela chave CPFCNPJ ( varchar(14) )
Hibernate: /* load com.ibs.model.MiniCliente */
select miniclient0_.CPFCNPJ as CPFCNPJ0_0_, miniclient0_.CD_CIDADE as CD2_0_0_, miniclient0_.CD_ESTADO as CD3_0_0_, miniclient0_.NM_CLIENTE as NM4_0_0_ from CLIENTE miniclient0_ where miniclient0_.CPFCNPJ=?
Hibernate: /* load one-to-many com.ibs.model.MiniCliente.miniClienteLimites */
select miniclient0_.CPFCNPJ as CPFCNPJ1_, miniclient0_.SQ_SEQUENCIA as SQ1_1_, miniclient0_.SQ_SEQUENCIA as SQ1_1_0_, miniclient0_.CPFCNPJ as CPFCNPJ1_0_ from CLIENTE_LIMITE miniclient0_ where miniclient0_.CPFCNPJ=?
A saida é: []
maniacs
Outubro 26, 2007, 4:36pm
#3
Olhando o log axei o problema
Estou usando firebird e estão usando char(14) ou seja retorna 14 caracters
se for CPF vai retornar "00000000 " e se for cnpj vai ser “0000000000"
vai achar o primeiro mais quando comparar sem os espaços nos outros não vai achar nada igual
"00000000000” != "00000000 "
fiz uma “gambi” !!! para arrumar… sobreescrevi o metodo getByID do ClienteDAO e fiz verificar os espaços e adicionar se precisar …
alguem tem outra ideia ?