lunes, 23 de abril de 2012

Porque no funciona autodetection con los test?

Para evitar tener que poner todas las clases que son manejadas por JPA, se puede incluir la siguiente propiedad en el fichero de configuración persistence.xml:

Esto hará que todas las clases de mapeo que están configuradas mediante mapeo se han tenidas en cuenta por el entityManager y sepa identificarlas.

El problema es cuando se tiene un fichero persistence-test.xml configurado para realizar las pruebas junit. Es posible que aún que este todo configurado correctamente, al realizar alguna operación de un error del tipo:
no persistent classes found for query class
Esto es debido a que la función de autodetectar solo funciona para clases que se encuentran dentro del mismo classpath. Por lo tanto si estamos haciendo pruebas y tenemos un fichero propio de configuración para las pruebas, las carpetas donde se generan los fuentes de las clases y los de los test son carpetas diferentes (todo esto usando una estructura maven por defecto).

Para ello podemos intentar la siguiente solución, y es indicar en el fichero de configuración persistence.xml donde se encuentran estas clases. Esto lo podemos realizar de dos formas:

1. Haciendolo a mano e indicando una propiedad por cada clase que queremos sea tenida en cuenta.
2. Indicando el lugar donde se encuentran todos los class, por ejemplo indicando el fichero jar con los classes. Para ello indicamos la propiedad de la siguiente forma:
${project.build.outputDirectory}
Maven al sustituir las variables pondrá la correcta ruta donde se encuentra el jar.

No hay comentarios:

Publicar un comentario