Quais são as principais diferenças entre o Hibernate e o Spring Data JPA? Quando não devemos usar o Hibernate ou o Spring Data JPA? Além disso, quando o modelo Spring JDBC pode ter um desempenho melhor que o Hibernate / Spring Data JPA?
207
Respostas:
O Hibernate é uma implementação JPA, enquanto o Spring Data JPA é uma abstração de acesso a dados JPA. O Spring Data JPA não pode funcionar sem um provedor de JPA.
O Spring Data oferece uma solução para o padrão DDD
Repository
ou para asGenericDao
implementações personalizadas herdadas . Também pode gerar consultas JPA em seu nome por meio de convenções de nome de método.Com o Spring Data, você pode usar o Hibernate, o Eclipse Link ou qualquer outro provedor de JPA. Um benefício muito interessante do uso do Spring ou Java EE é que você pode controlar os limites da transação declarativamente usando a
@Transactional
anotação .O Spring JDBC é muito mais leve e destina-se à consulta nativa; se você pretende usar apenas o JDBC sozinho, é melhor usar o Spring JDBC para lidar com a verbosidade do JDBC.
Portanto, o Hibernate e o Spring Data são complementares e não concorrentes.
fonte
Existem três coisas diferentes que estamos usando aqui:
Então, vamos entender como jpa dados primavera e primavera + hibernate obras-
Dados da Primavera JPA:
Digamos que você esteja usando o spring + hibernate para o seu aplicativo. Agora você precisa ter uma interface e implementação dao em que estará escrevendo a operação crud usando o SessionFactory do hibernate. Digamos que você esteja escrevendo a classe dao para a classe Employee, amanhã no seu aplicativo talvez seja necessário gravar uma operação similar para qualquer outra entidade. Portanto, há muito código padrão que podemos ver aqui.
Agora, o Spring data jpa nos permite definir interfaces dao, estendendo seus repositórios (repositório de dados, repositório de amostras), para que você forneça a implementação de dao em tempo de execução. Você não precisa mais escrever a implementação dao. É assim que o Spring Data Jpa facilita sua vida.
fonte
Eu discordo SpringJPA facilita a vida. Sim, ele fornece algumas classes e você pode executar o DAO rapidamente, mas, na verdade, é tudo o que você pode fazer. Se você quiser fazer algo mais do que findById () ou salvar, deve passar pelo inferno:
Por que o gerenciamento de transações próprias é uma desvantagem? Como o Java 1.8 permite métodos padrão nas interfaces, transações baseadas em anotações do Spring, simple não funcionam.
Infelizmente, o SpringJPA é baseado em reflexões e, às vezes, você precisa apontar um nome de método ou pacote de entidade para as anotações (!). É por isso que qualquer refatoração causa um grande acidente. Infelizmente, o @Transactional funciona apenas para o DS primário :( Então, se você tiver mais de um DataSources, lembre-se - as transações funcionam apenas para o primário :)
O Hibernate é compatível com JPA, SpringJPA Spring. O HibernateJPA DAO pode ser usado com JavaEE ou Hibernate Standalone, quando o SpringJPA pode ser usado no Spring - SpringBoot por exemplo
Use o Spring JDBC apenas quando precisar usar muitas associações ou quando precisar usar o Spring com várias conexões de fonte de dados. Geralmente, evite o JPA para associações.
Mas meu conselho geral, use uma solução nova - Daobab ( http://www.daobab.io ). O Daobab é meu Java e qualquer integrador de mecanismo JPA, e acredito que ajudará muito em suas tarefas :)
fonte
Spring Data
é uma biblioteca de conveniênciaJPA
que abstrai muitas coisas e traz a magia do Spring (goste ou não) para o acesso à loja de persistência. É usado principalmente para trabalhar com bancos de dados relacionais. Em suma, permite declarar interfaces que possuem métodos comofindByNameOrderByAge(String name);
esse serão analisadas em tempo de execução e convertidas emJPA
consultas apropriadas .Sua colocação no topo
JPA
faz com que seu uso seja tentador para:Desenvolvedores novatos que não o conhecem
SQL
ou o conhecem mal. Esta é uma receita para o desastre, mas eles podem se safar se o projeto for trivial.Engenheiros experientes que sabem o que fazem e desejam acelerar as coisas rapidamente. Esta pode ser uma estratégia viável (mas leia mais).
Da minha experiência com
Spring Data
, sua mágica é demais (isso é aplicávelSpring
em geral). Comecei a usá-lo intensamente em um projeto e acabei atingindo vários casos de esquina onde não conseguia tirar a biblioteca do caminho e acabei com soluções feias. Mais tarde, li as reclamações de outros usuários e percebi que esses problemas são comunsSpring Data
. Por exemplo, verifique esse problema que levou a horas de investigação / juramento:Acabei indo para um nível mais baixo e comecei a usar
JDBI
- uma boa biblioteca com apenas "mágica" suficiente para salvá-lo do clichê. Com ele, você tem controle total sobre as consultas SQL e quase nunca precisa combater a biblioteca.fonte
O Hibernate é a implementação do "JPA", que é uma especificação para objetos Java no Banco de Dados.
Eu recomendaria usar o JPA wrt, pois você pode alternar entre diferentes ORMS.
Ao usar o JDBC, você precisará usar as Consultas SQL; portanto, se você é proficiente em SQL, escolha JDBC.
fonte
Se você preferir simplicidade e mais controle nas consultas SQL, sugiro usar o Spring Data / Spring JDBC.
É uma boa quantidade de curva de aprendizado na JPA e às vezes é difícil depurar problemas. Por outro lado, enquanto você tem controle total sobre o SQL, fica muito mais fácil otimizar a consulta e melhorar o desempenho. Você pode compartilhar facilmente seu SQL com o DBA ou com alguém que tenha uma melhor compreensão do Banco de Dados.
fonte