Estoy tratando de mapear el resultado de una consulta nativa con uniones a Proyección (Interfaz) que no es una entidad. Tengo que mapear los codes| text[]| de matriz de Postgres | codes| text[]| a String[] getCodes(); en la interfaz de proyección. Con Entity, se puede mapear fácilmente definiendo los tipos a continuación y luego anotando las propiedades
@TypeDef( name = "string-array", typeClass = StringArrayType.class ) })Pero lo mismo parece no funcionar con las proyecciones. ¿Hay alguna forma de hacer lo mismo con la proyección sin convertir la matriz en texto en la consulta misma?
¿Qué hace su consulta nativa? ¿Quizás pueda usarBlaze-Persistence Entity Views además de JPA/Hibernate en lugar de permanecer en el ámbito del modelo JPA?
Blaze-Persistence es un generador de consultas sobre JPA que admite muchas de las características avanzadas de DBMS sobre el modelo JPA. Creé Entity Views encima para permitir un mapeo fácil entre modelos JPA y modelos definidos por interfaz personalizada, algo así como Spring Data Projections con esteroides. La idea es que defina su estructura de destino de la manera que desee y asigne atributos (captadores) a través de expresiones JPQL al modelo de entidad. Dado que el nombre del atributo se usa como asignación predeterminada, en su mayoría no necesita asignaciones explícitas, ya que el 80 % de los casos de uso es tener DTO que son un subconjunto del modelo de entidad.
Un mapeo DTO para su modelo podría verse tan simple como lo siguiente
@EntityView(SomeEntity.class) interface SomeEntityProjection { Integer getId(); String[] getCodes(); }Consultar es una cuestión de aplicar la vista de entidad a una consulta, siendo la más simple una consulta por id.
SomeEntityProjection dto = entityViewManager.find(entityManager, SomeEntityProjection.class, id);
Pero la integración de Spring Data le permite usarlo casi como Spring Data Projections: https://persistence.blazebit.com/documentation/entity-view/manual/en_US/index.html#spring-data-features
Solo buscará las asignaciones que le indiques que busque.