miércoles, 2 de septiembre de 2015

IllegalArgumentException: expecting IdClass mapping at ...

Buenas, este es otro error que da con los mapeos JPA, con los cuales me he estado  pegando un poco ultimamente.

Para empezar cuando desplegaba en local con Tomcat me salía el siguiente error:

Caused by: java.lang.IllegalArgumentException: expecting IdClass mapping
at org.hibernate.ejb.metamodel.AttributeFactory$3.resolveMember(AttributeFactory.java:911)
at org.hibernate.ejb.metamodel.AttributeFactory$4.resolveMember(AttributeFactory.java:949)
at org.hibernate.ejb.metamodel.AttributeFactory.determineAttributeMetadata(AttributeFactory.java:444)
at ....

Y según el error parece que es que no he indicado dentro del mapeo que atributo es la clave primaría de la tabla. Pero por más que miraba el código no encontraba el fallo, puesto que estaba correctamente anotado

@Id
@SequenceGenerator( name = "idImportacionSeq", sequenceName = "IMPORTACION_SEQ" )
@GeneratedValue( strategy = GenerationType.AUTO, generator = "idImportacionSeq" )
@Column( name = "ID_IMPORTACION" )
private Long id;

Desesperado porque es una configuración que había utilizado frecuentemente y no conocía la solución al error, me decidí por desplegar en el entorno de desarrollo que utilizaba un weblogic y por tanto otra implementación de JPA. En dicho servidor me fallaba también pero me daba un error más identificatvo

Substituted for missing class Exception [EclipseLink-7161] (Eclipse Persistence Services - 2.3.2.v20111125-r10461) - org.eclipse.persistence.exceptions.ValidationException Exception Description: Entity class [class es.unav.symplicity.dto.Importacion] has no primary key specified. It should define either an @Id, @EmbeddedId or an @IdClass. If you have defined PK using any of these annotations then make sure that you do not have mixed access-type (both fields and properties annotated) in your entity class hierarchy.

Y así pude encontrar la solución. Como dice la propia traza no se puede tener un tipo de acceso a los campos de BBDD 'mixto'. Es decir que o indicas las anotaciones JPA en los atributos o lo indicas en los métodos get/set. Pero no los dos tipos a la vez.

Mi clase extendía de otra que hacía otro tipo de acceso y de ahí el fallo. Cambie de lugar las anotaciones JPA para que todas coincidiesen en el tipo de acceso y se soluciono.

No hay comentarios:

Publicar un comentario