Herramientas de usuario

Herramientas del sitio


simo:documentos:tecnicos:repositorios

Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

Ambos lados, revisión anterior Revisión previa
Próxima revisión
Revisión previa
simo:documentos:tecnicos:repositorios [2017/10/25 03:16]
lgomez
simo:documentos:tecnicos:repositorios [2017/10/25 03:48] (actual)
lgomez
Línea 24: Línea 24:
     * **listByQuery:​ ** Lista entidades usando JPA     * **listByQuery:​ ** Lista entidades usando JPA
     * **list: ** Lista entidades usando Hibernate Search y Lucene o JPA según el parámetro search_mode     * **list: ** Lista entidades usando Hibernate Search y Lucene o JPA según el parámetro search_mode
 +
 +Al incluir interfaces distintas a las proporcionadas por Spring, se hace necesario tener una implementación,​ la clase SearchableRepositoryImpl contiene una implementación por defecto y es por ello que para construir un Repositorio Simo, solo se necesita la interfaz principal (Que extiende de PagingAndSortingRepository,​ SearchableRepository y ListableRepository) y una clase concreta que extienda de SearchableRepositoryImpl y que por tanto contiene la implementación de los métodos definidos en las interfaces propias.
 +
 +Nótese sin embargo que aún se necesita dar implementación a los métodos de PagingAndSortingRepository e indirectamente de CrudRepository,​ en adición a los métodos finder definidos en la interfaz principal, como se expuso anteriormente,​ de esto se encarga el framework, al detectar la anotación @Repository en la definición de la interfaz.
 +
 +Es decir que la implementación concreta proviene de dos fuentes, la primera es el framework y es transparente al programador,​ la segunda es una clase concreta llamada de igual forma a la interfaz principal pero terminando en el sufijo Impl.  Ejemplo: El repositorio SIMO para la entidad convocatoria se compone de la interfaz ConvocatoriaRepository y la clase concreta ConvocatoriaRepositoryImpl.
 +
 +Otro detalle importante es que la clase concreta no implementa directamente la interfaz principal, pues si lo hiciera, tendría que dar implementación también a los métodos declarados en ella y a los métodos contenidos en PagingAndSortingRepository,​ de esta forma se perderían las facilidades otorgadas por el framework. Al no haber una implementación directa (mediante la palabra clave **//​implements//​**,​ el framework debe inferir que clase concreta utilizar, y lo hace por convención buscando una clase de igual nombre a la interfaz pero con el sufijo Impl.
 +
 +Nótese también que la clase concreta no necesita en sí escribir métodos puesto que al heredar de SearchableRepositoryImpl ya tiene una implementación por defecto, sin embargo, es en esta clase concreta donde se pueden sobreescribir métodos de su clase madre para dar implementación específicas a la entidad que se está manejando en el repositorio,​ y este el caso que más se encuentra en SIMO
  
simo/documentos/tecnicos/repositorios.1508901401.txt.gz · Última modificación: 2017/10/25 03:16 por lgomez