Hibernate version: 3.2.6
Mapping documents:
Hello, i have this hibernate code:
Code:
public List<Cliente> findAll() {
List<Cliente> lista;
Session session = HibernateUtil.getCurrentSession();
try {
session.beginTransaction();
Criteria crit = session.createCriteria(Cliente.class);
lista = crit.list();
session.getTransaction().commit();
return lista;
} catch (HibernateException e) {
e.printStackTrace();
throw e;
} finally {
if (session.isOpen())
session.close();
}
}
and also have this test:
Code:
HibClienteRepository repo = new HibClienteRepository();
Cliente c = new Cliente();
repo.makePersistent(c);
Cliente c2 = repo.findAll().get(0);
Matafuego m1 = new Matafuego("1");
Matafuego m2 = new Matafuego("2");
Matafuego m3 = new Matafuego("3");
Matafuego m4 = new Matafuego("4");
c2.addMatafuego(m1);
c2.addMatafuego(m2);
c2.addMatafuego(m3);
c2.addMatafuego(m4);
repo.makePersistent(c2);
assertEquals(1, repo.findAll().size());
For some reason i can figure out, the assertEquals fails saying that there are 4 elements on the collection instead of 1 !!!!
Obviously the 4 elements are associatted with the 4 Matafuego instances asociated with the Cliente. What is the problem here? The logs of this test show this:
Code:
Hibernate: insert into cliente (activo, celular, documento, domicilio, email, fax, localidad, nombre, responsabilidad, saldo, telefono, tipo_doc, id) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
Hibernate: select this_.id as id0_6_, this_.activo as activo0_6_, this_.celular as celular0_6_, this_.documento as documento0_6_, this_.domicilio as domicilio0_6_, this_.email as email0_6_, this_.fax as fax0_6_, this_.localidad as localidad0_6_, this_.nombre as nombre0_6_, this_.responsabilidad as respons10_0_6_, this_.saldo as saldo0_6_, this_.telefono as telefono0_6_, this_.tipo_doc as tipo13_0_6_, matafuegos2_.cliente_id as cliente11_8_, matafuegos2_.id as id8_, matafuegos2_.id as id8_0_, matafuegos2_.anoFabricacion as anoFabri2_8_0_, matafuegos2_.capacidad as capacidad8_0_, matafuegos2_.cliente_id as cliente11_8_0_, matafuegos2_.direccion as direccion8_0_, matafuegos2_.idInterna as idInterna8_0_, matafuegos2_.marca as marca8_0_, matafuegos2_.nombre as nombre8_0_, matafuegos2_.nroAparato as nroAparato8_0_, matafuegos2_.tipoMatafuego as tipoMata9_8_0_, matafuegos2_.ubicacion as ubicacion8_0_, transaccio3_.cliente_id as cliente2_9_, transaccio3_.id as id9_, transaccio3_.id as id1_1_, transaccio3_.cliente_id as cliente2_1_1_, transaccio3_1_.cheque_FK as cheque6_2_1_, transaccio3_1_.fecha as fecha2_1_, transaccio3_1_.monto as monto2_1_, transaccio3_1_.notas as notas2_1_, transaccio3_1_.nroRecibo as nroRecibo2_1_, transaccio3_2_.factura_FK as factura5_3_1_, transaccio3_2_.fecha as fecha3_1_, transaccio3_2_.montoEnCC as montoEnCC3_1_, transaccio3_2_.tieneChequeAsociado as tieneChe3_3_1_, case when transaccio3_1_.id is not null then 1 when transaccio3_2_.id is not null then 2 when transaccio3_.id is not null then 0 else -1 end as clazz_1_, cheque4_.id as id15_2_, cheque4_.CUIT as CUIT15_2_, cheque4_.aLaOrdenDe as aLaOrdenDe15_2_, cheque4_.banco as banco15_2_, cheque4_.descripcion as descripc5_15_2_, cheque4_.entregadoPor as entregad6_15_2_, cheque4_.estado as estado15_2_, cheque4_.fecha as fecha15_2_, cheque4_.fechaDeCobro as fechaDeC9_15_2_, cheque4_.monto as monto15_2_, cheque4_.numeroCheque as numeroC11_15_2_, facturainm5_.id as id4_3_, facturainm5_.cliente_id as cliente7_4_3_, facturainm5_.consumidorFinal as consumid2_4_3_, facturainm5_.fecha as fecha4_3_, facturainm5_.monto as monto4_3_, facturainm5_.numero as numero4_3_, facturainm5_.tipoFactura as tipoFact6_4_3_, cliente6_.id as id0_4_, cliente6_.activo as activo0_4_, cliente6_.celular as celular0_4_, cliente6_.documento as documento0_4_, cliente6_.domicilio as domicilio0_4_, cliente6_.email as email0_4_, cliente6_.fax as fax0_4_, cliente6_.localidad as localidad0_4_, cliente6_.nombre as nombre0_4_, cliente6_.responsabilidad as respons10_0_4_, cliente6_.saldo as saldo0_4_, cliente6_.telefono as telefono0_4_, cliente6_.tipo_doc as tipo13_0_4_, pagos7_.venta_a_cliente_id as venta1_10_, pagodeclie8_.id as pagos2_10_, pagodeclie8_.id as id1_5_, pagodeclie8_1_.cliente_id as cliente2_1_5_, pagodeclie8_.cheque_FK as cheque6_2_5_, pagodeclie8_.fecha as fecha2_5_, pagodeclie8_.monto as monto2_5_, pagodeclie8_.notas as notas2_5_, pagodeclie8_.nroRecibo as nroRecibo2_5_ from cliente this_ left outer join matafuego matafuegos2_ on this_.id=matafuegos2_.cliente_id left outer join transaccion_con_cliente transaccio3_ on this_.id=transaccio3_.cliente_id left outer join pago_de_cliente transaccio3_1_ on transaccio3_.id=transaccio3_1_.id left outer join venta_a_cliente transaccio3_2_ on transaccio3_.id=transaccio3_2_.id left outer join cheque cheque4_ on transaccio3_1_.cheque_FK=cheque4_.id left outer join factura facturainm5_ on transaccio3_2_.factura_FK=facturainm5_.id left outer join cliente cliente6_ on facturainm5_.cliente_id=cliente6_.id left outer join venta_a_cliente_pago_de_cliente pagos7_ on transaccio3_.id=pagos7_.venta_a_cliente_id left outer join pago_de_cliente pagodeclie8_ on pagos7_.pagos_id=pagodeclie8_.id left outer join transaccion_con_cliente pagodeclie8_1_ on pagodeclie8_.id=pagodeclie8_1_.id where this_.nombre like ?
Hibernate: insert into matafuego (anoFabricacion, capacidad, cliente_id, direccion, idInterna, marca, nombre, nroAparato, tipoMatafuego, ubicacion, id) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
Hibernate: insert into matafuego (anoFabricacion, capacidad, cliente_id, direccion, idInterna, marca, nombre, nroAparato, tipoMatafuego, ubicacion, id) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
Hibernate: insert into matafuego (anoFabricacion, capacidad, cliente_id, direccion, idInterna, marca, nombre, nroAparato, tipoMatafuego, ubicacion, id) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
Hibernate: insert into matafuego (anoFabricacion, capacidad, cliente_id, direccion, idInterna, marca, nombre, nroAparato, tipoMatafuego, ubicacion, id) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
Hibernate: update cliente set activo=?, celular=?, documento=?, domicilio=?, email=?, fax=?, localidad=?, nombre=?, responsabilidad=?, saldo=?, telefono=?, tipo_doc=? where id=?
Hibernate: select this_.id as id0_6_, this_.activo as activo0_6_, this_.celular as celular0_6_, this_.documento as documento0_6_, this_.domicilio as domicilio0_6_, this_.email as email0_6_, this_.fax as fax0_6_, this_.localidad as localidad0_6_, this_.nombre as nombre0_6_, this_.responsabilidad as respons10_0_6_, this_.saldo as saldo0_6_, this_.telefono as telefono0_6_, this_.tipo_doc as tipo13_0_6_, matafuegos2_.cliente_id as cliente11_8_, matafuegos2_.id as id8_, matafuegos2_.id as id8_0_, matafuegos2_.anoFabricacion as anoFabri2_8_0_, matafuegos2_.capacidad as capacidad8_0_, matafuegos2_.cliente_id as cliente11_8_0_, matafuegos2_.direccion as direccion8_0_, matafuegos2_.idInterna as idInterna8_0_, matafuegos2_.marca as marca8_0_, matafuegos2_.nombre as nombre8_0_, matafuegos2_.nroAparato as nroAparato8_0_, matafuegos2_.tipoMatafuego as tipoMata9_8_0_, matafuegos2_.ubicacion as ubicacion8_0_, transaccio3_.cliente_id as cliente2_9_, transaccio3_.id as id9_, transaccio3_.id as id1_1_, transaccio3_.cliente_id as cliente2_1_1_, transaccio3_1_.cheque_FK as cheque6_2_1_, transaccio3_1_.fecha as fecha2_1_, transaccio3_1_.monto as monto2_1_, transaccio3_1_.notas as notas2_1_, transaccio3_1_.nroRecibo as nroRecibo2_1_, transaccio3_2_.factura_FK as factura5_3_1_, transaccio3_2_.fecha as fecha3_1_, transaccio3_2_.montoEnCC as montoEnCC3_1_, transaccio3_2_.tieneChequeAsociado as tieneChe3_3_1_, case when transaccio3_1_.id is not null then 1 when transaccio3_2_.id is not null then 2 when transaccio3_.id is not null then 0 else -1 end as clazz_1_, cheque4_.id as id15_2_, cheque4_.CUIT as CUIT15_2_, cheque4_.aLaOrdenDe as aLaOrdenDe15_2_, cheque4_.banco as banco15_2_, cheque4_.descripcion as descripc5_15_2_, cheque4_.entregadoPor as entregad6_15_2_, cheque4_.estado as estado15_2_, cheque4_.fecha as fecha15_2_, cheque4_.fechaDeCobro as fechaDeC9_15_2_, cheque4_.monto as monto15_2_, cheque4_.numeroCheque as numeroC11_15_2_, facturainm5_.id as id4_3_, facturainm5_.cliente_id as cliente7_4_3_, facturainm5_.consumidorFinal as consumid2_4_3_, facturainm5_.fecha as fecha4_3_, facturainm5_.monto as monto4_3_, facturainm5_.numero as numero4_3_, facturainm5_.tipoFactura as tipoFact6_4_3_, cliente6_.id as id0_4_, cliente6_.activo as activo0_4_, cliente6_.celular as celular0_4_, cliente6_.documento as documento0_4_, cliente6_.domicilio as domicilio0_4_, cliente6_.email as email0_4_, cliente6_.fax as fax0_4_, cliente6_.localidad as localidad0_4_, cliente6_.nombre as nombre0_4_, cliente6_.responsabilidad as respons10_0_4_, cliente6_.saldo as saldo0_4_, cliente6_.telefono as telefono0_4_, cliente6_.tipo_doc as tipo13_0_4_, pagos7_.venta_a_cliente_id as venta1_10_, pagodeclie8_.id as pagos2_10_, pagodeclie8_.id as id1_5_, pagodeclie8_1_.cliente_id as cliente2_1_5_, pagodeclie8_.cheque_FK as cheque6_2_5_, pagodeclie8_.fecha as fecha2_5_, pagodeclie8_.monto as monto2_5_, pagodeclie8_.notas as notas2_5_, pagodeclie8_.nroRecibo as nroRecibo2_5_ from cliente this_ left outer join matafuego matafuegos2_ on this_.id=matafuegos2_.cliente_id left outer join transaccion_con_cliente transaccio3_ on this_.id=transaccio3_.cliente_id left outer join pago_de_cliente transaccio3_1_ on transaccio3_.id=transaccio3_1_.id left outer join venta_a_cliente transaccio3_2_ on transaccio3_.id=transaccio3_2_.id left outer join cheque cheque4_ on transaccio3_1_.cheque_FK=cheque4_.id left outer join factura facturainm5_ on transaccio3_2_.factura_FK=facturainm5_.id left outer join cliente cliente6_ on facturainm5_.cliente_id=cliente6_.id left outer join venta_a_cliente_pago_de_cliente pagos7_ on transaccio3_.id=pagos7_.venta_a_cliente_id left outer join pago_de_cliente pagodeclie8_ on pagos7_.pagos_id=pagodeclie8_.id left outer join transaccion_con_cliente pagodeclie8_1_ on pagodeclie8_.id=pagodeclie8_1_.id
I am guessing i have some problem with my mapping, but can figure out what it is. My mapping on Cliente is like this:
Code:
@OneToMany(fetch=FetchType.EAGER, mappedBy = "cliente", cascade = {CascadeType.ALL})
private Set<Matafuego> matafuegos = new HashSet<Matafuego>();
and the mapping on Matafuego is like this:
Code:
@ManyToOne(cascade=CascadeType.ALL, targetEntity=Cliente.class)
private Cliente cliente;
Thanks very much for your help!!