Estou usando o Spring JPA para executar todas as operações do banco de dados. No entanto, não sei como selecionar colunas específicas de uma tabela no Spring JPA?
Por exemplo:
SELECT projectId, projectName FROM projects
java
jpa
spring-data-jpa
user1817436
fonte
fonte
Respostas:
Você pode definir
nativeQuery = true
a@Query
anotação de umaRepository
classe como esta:Observe que você terá que fazer o mapeamento sozinho. Provavelmente é mais fácil usar a pesquisa mapeada regular como esta, a menos que você realmente precise apenas desses dois valores:
Provavelmente vale a pena examinar também os documentos de dados do Spring .
fonte
FIND_PROJECTS
) com ovalue
nome do atributo (portanto, se este foi o meu código que eu teria que escrevê-lo como@Query(value = FIND_PROJECTS, nativeQuery = true)
, etc.Você pode usar projeções do Spring Data JPA (doc) . No seu caso, crie uma interface:
e adicione o seguinte método ao seu repositório
fonte
Não gosto particularmente da sintaxe (parece um pouco hacky ...), mas esta é a solução mais elegante que consegui encontrar (ela usa uma consulta JPQL personalizada na classe de repositório JPA):
Então, é claro, você apenas precisa fornecer um construtor para
Document
que aceitedocId
&filename
como construtor args.fonte
Na minha situação, eu só preciso do resultado json, e isso funciona para mim:
no controlador:
fonte
Object
por uma interface personalizada, conforme descrito por mpr. funciona perfeitamenteNo meu caso, criei uma classe de entidade separada sem os campos que não são obrigatórios (apenas com os campos necessários).
Mapeie a entidade para a mesma tabela. Agora, quando todas as colunas são necessárias, eu uso a entidade antiga, quando apenas algumas colunas são necessárias, eu uso a entidade lite.
por exemplo
Você pode criar algo como:
Isso funciona quando você sabe que as colunas devem ser buscadas (e isso não vai mudar).
não funcionará se você precisar decidir dinamicamente as colunas.
fonte
Eu acho que a maneira mais fácil pode ser usar QueryDSL , que vem com o Spring-Data.
Usando a sua pergunta, a resposta pode ser
O gerente da entidade pode ser conectado automaticamente e você sempre trabalhará com objetos e classes sem usar a linguagem * QL.
Como você pode ver no link, a última opção parece, quase para mim, mais elegante, ou seja, usar o DTO para armazenar o resultado. Aplique ao seu exemplo que será:
Definindo o ProjectDTO como:
fonte
Com as versões mais recentes do Spring, é possível fazer o seguinte:
Se não estiver usando a consulta nativa, isso pode ser feito da seguinte maneira:
Usando a consulta nativa, o mesmo pode ser feito como abaixo:
Para detalhes, verifique os documentos
fonte
Na minha opinião, esta é uma ótima solução:
e usá-lo assim
fonte
Usando o Spring Data JPA, existe uma disposição para selecionar colunas específicas do banco de dados
---- No DAOImpl ----
---- No Repo ----
Funcionou 100% no meu caso. Obrigado.
fonte
Você pode usar o JPQL:
ou você pode usar a consulta sql nativa.
fonte
É possível especificar
null
como valor do campo no sql nativo.fonte
Você pode aplicar o código abaixo na sua classe de interface de repositório.
fonte
Usando consulta nativa:
fonte
Você pode usar a resposta sugerida por @jombie e:
findAll()
método para esse fim, mas use o nome de sua escolha;List
parametrizado com sua nova interface (por exemploList<SmallProject>
).fonte