Problema con consulta en Hibernate utilizando criteria
Hola a todos,
tengo una duda que me ha surgido acerca de hibernate:
Estoy realizando un pequeño proyecto Java, en el que utilizo Hibernate para el acceso a BBDD.
Mi problema viene cuando hago una consulta a una tabla determinada de la BBDD, que debería devolverme un listado, pero me salen bastantes errores y no se de donde viene el error.
Aquí pongo mi método:
Observaciones del metodo:
- "idAmigo" es un autoincrement, por lo que se incrementa automaticamente en cada nueva insercion de la tabla "amigos" de la BBDD
Aquí os pongo el mapeo de la clase "Amigo.hbm.xml":
Hacer una observacion acerca del mapeo:
- "persona" y "personaAmigo" están definidos en la clase "Amigo" como objetos, y en la BBDD como tipo "integer", por lo que he tenido que redefinirlos.
Para finalizar, el error creo que viene a la hora de definir el "criteria" en el metodo anteriormente puesto, o en el mapeo, a la hora de definir los objetos "personaAmigo" y "persona" para referenciarlos con la BBDD.
Aqui os pongo tambien las clases Amigo y Persona, por si le quereis echar un vistazo:
-------CLASE AMIGO-----
----CLASE PERSONA----
Bueno gracias por todo y espero haberme explicado, :D.
Un saludo.
- Inicie sesión o regístrese para enviar comentarios
Stacktrace
Ayudaría mucho si pones el error que te devuelve.
Saludos.
Ok, ya pusiste todo excepto
Ok, ya pusiste todo excepto lo más importante: el error.
Pega el stacktrace del error pf.
Saludos.
el error que me "tira"
aqui teneis el error:
Exception in thread "main" org.hibernate.PropertyAccessException: IllegalArgumentException occurred calling getter of proyecto.modelo.Persona.idPersona
at org.hibernate.property.BasicPropertyAccessor$BasicGetter.get(BasicPropertyAccessor.java:171)
at org.hibernate.tuple.entity.AbstractEntityTuplizer.getIdentifier(AbstractEntityTuplizer.java:183)
at org.hibernate.persister.entity.AbstractEntityPersister.getIdentifier(AbstractEntityPersister.java:3591)
at org.hibernate.persister.entity.AbstractEntityPersister.isTransient(AbstractEntityPersister.java:3307)
at org.hibernate.engine.ForeignKeys.isTransient(ForeignKeys.java:181)
at org.hibernate.engine.ForeignKeys.getEntityIdentifierIfNotUnsaved(ForeignKeys.java:218)
at org.hibernate.type.EntityType.getIdentifier(EntityType.java:397)
at org.hibernate.type.ManyToOneType.nullSafeSet(ManyToOneType.java:87)
at org.hibernate.loader.Loader.bindPositionalParameters(Loader.java:1707)
at org.hibernate.loader.Loader.bindParameterValues(Loader.java:1678)
at org.hibernate.loader.Loader.prepareQueryStatement(Loader.java:1563)
at org.hibernate.loader.Loader.doQuery(Loader.java:673)
at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:236)
at org.hibernate.loader.Loader.doList(Loader.java:2220)
at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2104)
at org.hibernate.loader.Loader.list(Loader.java:2099)
at org.hibernate.loader.criteria.CriteriaLoader.list(CriteriaLoader.java:94)
at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1569)
at org.hibernate.impl.CriteriaImpl.list(CriteriaImpl.java:283)
at proyecto.dao.AmigoDAO.getAmigosPersona(AmigoDAO.java:83)
at proyecto.pruebas.main(pruebas.java:39)
Caused by: java.lang.IllegalArgumentException: object is not an instance of declaring class
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.hibernate.property.BasicPropertyAccessor$BasicGetter.get(BasicPropertyAccessor.java:145)
... 20 more
Java Result: 1
SOLUCIONADO! :D
Buenas tardes a todos!
ante todo, agradeceros la ayuda prestada, me ha servido para hacer diferentes pruebas.
La solucion estaba en el criteria, que lo habia hecho mal. Aqui pongo el criteria correcto, por si a alguien le pasa alguna vez:
tenia que poner el "name" asignado en el mapeo de Amigo ("persona", que es de tipo Persona) en el criteria, y compararlo con el objeto Persona "p" a pelo.
Espero haberme explicado correctamente.
Un saludo!