Estou com dificuldades para decidir se devo continuar com o Hibernate para um novo projeto ou se me molhar com o JPA e a nova implementação do Spring Data.
A estrutura do Spring Data é destinada a projetos grandes ou pequenos com requisitos de consulta modestos?
Embora eu certamente veja a vantagem na redução de código usando a @Query
anotação, o que você faz para consultas dinâmicas? E quando você deseja implementar um método save () bastante complexo?
A documentação diz para criar uma interface e implementação personalizadas que seu repositório principal implementa, mas e se você precisar acessar algum super método no próprio repositório crud? O repositório crud implementa o personalizado - e não o contrário. Parece um design estranho.
Estou muito incerto se essa estrutura atenderá aos desafios de aplicativos complexos e grandes. Eu nunca tive muitos problemas com o Hibernate, e estou pensando em manter a boa e velha confiabilidade, em vez de ir com o Spring Data JPA.
O que devo fazer? Quais complicações e custos imprevistos vou encontrar se eu for com o Spring Data JPA?
Respostas:
Então,
spring-data
faz alguma mágica extra que ajuda com consultas complexas. É estranho no começo e você pula totalmente nos documentos, mas é realmente poderoso e útil.Envolve criar um personalizado
Repository
e um personalizado `RepositoryImpl 'e dizer ao Spring onde encontrá-lo. Aqui está um exemplo:Classe de configuração -
aponte para sua configuração xml ainda necessáriacom a anotação apontando para o pacote de repositórios (ele procura*Impl
classes automaticamente agora):jpa-repositories.xml - digaSpring
onde encontrar seus repositórios. Diga tambémSpring
para procurar repositórios personalizados com oCustomImpl
nome do arquivo:MyObjectRepository
- é aqui que você pode colocar métodos de consulta anotados e não anotados. Observe como essa interface do repositório estende a seguinteCustom
:MyObjectRepositoryCustom
- métodos de repositório que são mais complexos e não podem ser manipulados com uma consulta simples ou uma anotação:MyObjectRepositoryCustomImpl
- onde você realmente implementa esses métodos com uma conexão automáticaEntityManager
:Surpreendentemente, tudo isso se junta e os métodos de ambas as interfaces (e a interface CRUD que você implementa) aparecem quando você faz:
Você verá:
Realmente funciona. E você obtém uma interface para consulta.
spring-data
está realmente pronto para uma aplicação grande. E quanto mais consultas você puder inserir em anotações simples ou apenas o melhor para você.Tudo isso está documentado no site Spring Data Jpa .
Boa sorte.
fonte
JpaRepository
->MyJpaRepository
. Você também deve criar umMyJpaRepositoryFactoryBean
mas, se configurar tudo corretamente, poderá substituir o método .save (). Aqui estão os documentos JPA do Spring Data: static.springsource.org/spring-data/data-jpa/docs/current/… Não desista ainda!Eu usei o Spring Data JPA em projetos pequenos e grandes com demandas de consulta simples. A principal vantagem é não ter que usar a
@Query
anotação. Não há nada no Spring Data que o impeça de usá-lo em grandes projetos, e oQueryDSL
suporte recente pode ajudá-lo. Este é um exemplo do uso do QueryDSL para direcionar o Hibernate.Se você prevê consultas complexas e se sente à vontade usando objetos do Hibernate sem JPA, acho que uma combinação alternativa poderia ser ter os dados simples do Spring
Repository
ao lado dos complexos baseados no Hibernate com os métodos específicos que você pode precisar. Pode ser menos complicado que distorcer uma implementação do Hibernate na estrutura JPA do Spring Data.fonte
O Spring JPA fornecerá muita abstração ao escrever SQL e até alguns HQL usando a declaração do método de consulta. O Spring JPA brilha com sua geração de consulta, mas quando você deseja uma solução puramente hibernada, pode personalizar conforme necessário, pois o Spring JPA ainda é baseado no hibernação. Verifique os documentos http://static.springsource.org/spring-data/data-jpa/docs/current/reference/html para obter mais informações.
fonte