Estoy usando Spring JPA para realizar todas las operaciones de la base de datos. Sin embargo, no sé cómo seleccionar columnas específicas de una tabla en Spring JPA.
Por ejemplo:
SELECT projectId, projectName FROM projects
java
jpa
spring-data-jpa
usuario1817436
fuente
fuente
Respuestas:
Puede establecer
nativeQuery = true
la@Query
anotación de unaRepository
clase como esta:Tenga en cuenta que tendrá que hacer el mapeo usted mismo. Probablemente sea más fácil usar la búsqueda asignada regular como esta, a menos que realmente solo necesite esos dos valores:
Probablemente también valga la pena mirar los documentos de datos de Spring .
fuente
FIND_PROJECTS
) con elvalue
nombre del atributo (por lo tanto si se trataba de mi código que habría tenido que escribir como@Query(value = FIND_PROJECTS, nativeQuery = true)
, etcPuede usar proyecciones de Spring Data JPA (doc) . En su caso, cree la interfaz:
y agregue el siguiente método a su repositorio
fuente
No me gusta la sintaxis en particular (parece un poco hacky ...) pero esta es la solución más elegante que pude encontrar (utiliza una consulta JPQL personalizada en la clase de repositorio JPA):
Entonces, por supuesto, solo tiene que proporcionar un constructor
Document
que aceptedocId
&filename
como argumentos de constructor.fuente
En mi situación, solo necesito el resultado json, y esto funciona para mí:
en el controlador:
fuente
Object
por una interfaz personalizada como la describe mpr. funciona a la perfecciónEn mi caso, creé una clase de entidad separada sin los campos que no son obligatorios (solo con los campos que son obligatorios).
Asigne la entidad a la misma tabla. Ahora, cuando se requieren todas las columnas, uso la entidad anterior, cuando solo se requieren algunas columnas, uso la entidad lite.
p.ej
Puedes crear algo como:
Esto funciona cuando conoce las columnas para buscar (y esto no va a cambiar).
no funcionará si necesita decidir dinámicamente las columnas.
fuente
Supongo que la manera más fácil es usar QueryDSL , que viene con Spring-Data.
Usando su pregunta, la respuesta puede ser
El administrador de la entidad puede ser Autowired y siempre trabajará con objetos y clases sin usar * lenguaje QL.
Como puede ver en el enlace, la última opción parece, casi para mí, más elegante, es decir, usar DTO para almacenar el resultado. Aplique a su ejemplo que será:
Definiendo ProjectDTO como:
fuente
Con las versiones Spring más recientes, se puede hacer lo siguiente:
Si no utiliza la consulta nativa, puede hacerlo de la siguiente manera:
Usando la consulta nativa, lo mismo se puede hacer de la siguiente manera:
Para más detalles, consulte los documentos
fuente
En mi opinión, esta es una gran solución:
y usándolo así
fuente
Usando Spring Data JPA hay una disposición para seleccionar columnas específicas de la base de datos
---- En DAOImpl ----
---- En Repo ----
Funcionó al 100% en mi caso. Gracias.
fuente
Puedes usar JPQL:
o puede usar la consulta SQL nativa.
fuente
Es posible especificar
null
como valor de campo en sql nativo.fuente
Puede aplicar el siguiente código en su clase de interfaz de repositorio.
fuente
Usando la consulta nativa:
fuente
Puede usar la respuesta sugerida por @jombie y:
findAll()
método para este propósito, pero use el nombre de su elección;List
parametrizado con su nueva interfaz (por ejemploList<SmallProject>
).fuente