java - queries - spring jpa repository named query example




Spring Data-JPA versus JPA: Qual é a diferença? (2)

Estou um pouco confuso sobre a diferença entre o Spring Data-JPA e o JPA. Eu sei sobre o JPA que é uma especificação para persistir os objetos Java para um banco de dados relacional usando tecnologia ORM popular ou seja, em outras palavras JPA fornece interfaces e outras tecnologias ORM, implementa as interfaces conhecidas como provedor JPA, por exemplo, Hibernate.

Agora, o que exatamente é o Spring Data JPA. O Spring Data JPA incluiu mais alguma funcionalidade (Interfaces) sobre o JPA e ainda é especificado apenas ou é também um provedor JPA?

Eu vi Spring Data JPA funciona em torno de repositórios (camada DAO: se não estou errado). Então eu quero dizer como é diferente usando 'Spring Data JPA + Hibernate' ou usando apenas 'Hibernate' direcionamento?


A API Java Persistence, às vezes chamada de JPA, é uma estrutura Java que gerencia dados relacionais em aplicativos usando a plataforma Java, Standard Edition (JavaSE) e a plataforma Java Enterprise Edition (JavaEE).

Persistência neste contexto abrange três áreas:

  • A própria API, definida no pacote javax.persistence .

  • A linguagem de consulta de persistência de Java (JPQL).

  • Metadados objeto-relacional.

Spring Data O JPA faz parte do projeto Spring Data, que facilita a implementação de repositórios baseados em JPA.

Características:

  • Suporte sofisticado para construir repositórios baseados no Spring e JPA
  • Suporte para predicados QueryDSL e, portanto, consultas JPA com segurança de tipos
  • Auditoria transparente de classe de domínio
  • Suporte a paginação, execução de consulta dinâmica, capacidade de integrar código de acesso a dados personalizados
  • Validação de consultas anotadas @Query no tempo de inicialização
  • Suporte para mapeamento de entidades baseadas em XML
  • Configuração do repositório baseado em @EnableJpaRepositories introduzindo @EnableJpaRepositories


Eu vi Spring, JPA trabalha em torno de repositórios (camada DAO: se não estou errado). Então eu quero dizer como é diferente usando 'Spring JPA + Hibernate' ou usando apenas 'Hibernate' diretamente?

Como você disse, o JPA é uma especificação, enquanto o Hibernate é uma implementação específica dessa especificação (essas implementações são geralmente chamadas de Provedores ). Usando o Hibernate, você se vincula a esse provedor restringindo sua liberdade de alternar para outra opção quando necessário (por exemplo, você deseja usar o EclipseLink ou o ObjectDB, porque o Hibernate tem um bug que interrompe o processo de desenvolvimento).

Citando a documentação do Spring Data JPA :

A implementação de uma camada de acesso a dados de um aplicativo tem sido incômoda por um bom tempo. Demasiado código clichê teve que ser escrito. As classes de domínio eram anêmicas e não foram projetadas de maneira orientada a objetos reais ou direcionadas a domínios.

O uso dessas duas tecnologias torna muito mais fácil a vida dos desenvolvedores em relação à persistência do modelo de domínio avançado. No entanto, a quantidade de código clichê para implementar repositórios, especialmente ainda é bastante alta. Portanto, o objetivo da abstração do repositório do Spring Data é reduzir o esforço para implementar camadas de acesso a dados para vários armazenamentos de persistência de forma significativa.

Para resumir, é sobre o JPA adicionar outra camada de abstração, uma espécie de definição de um design baseado em padrões para suportar Persistence Layer em um contexto Spring. Essas interfaces definidas (conhecidas pelo Spring) fornecem os serviços que a estrutura manipula usando o JPA para atender aos resultados. Você define um repositório de forma que o Spring possa varrer o projeto e encontrá-lo:

<repositories base-package="com.acme.repositories" />

Assim, permitindo-lhe usá-lo no contexto de um contêiner ou fora dele.

Agora o que exatamente é Spring, JPA. É o Spring, o JPA adicionou mais alguma funcionalidade (Interfaces) sobre o JPA e ainda é especificado apenas ou é também um provedor JPA?

Spring Data O JPA fornece uma definição para implementar repositórios que são suportados sob o título referenciando a especificação JPA, usando o provedor que você define.





jpa-2.0