O nome do projeto foi alterado de Hibernate Types para Hypersistence Utils porque o escopo do projeto é muito mais amplo agora, oferecendo também utilitários Spring.
Por esse motivo, ao migrar do Hibernate Types 2.x para o Hypersistence Utils 3.x, você precisará seguir estes passos:
com.vladmihalcea.hibernate
para io.hypersistence.utils.hibernate
.com.vladmihalcea.spring
para io.hypersistence.utils.spring
.É isso!
O projeto Hypersistence Utils oferece utilitários de uso geral para Spring e Hibernate.
A principal vantagem deste projeto é que ele suporta uma ampla gama de versões do Hibernate, abrangendo desde Hibernate ORM 6.6 , 6.5 , 6.4 , 6.3 até 6.2 , 6.1 , 6.0 , 5.6 e Hibernate 5.5 .
Dependendo da versão do Hibernate que você está usando, você precisa adicionar a seguinte dependência:
<dependency>
<groupId>io.hypersistence</groupId>
<artifactId>hypersistence-utils-hibernate-63</artifactId>
<version>3.9.0</version>
</dependency>
<dependency>
<groupId>io.hypersistence</groupId>
<artifactId>hypersistence-utils-hibernate-62</artifactId>
<version>3.9.0</version>
</dependency>
<dependency>
<groupId>io.hypersistence</groupId>
<artifactId>hypersistence-utils-hibernate-60</artifactId>
<version>3.9.0</version>
</dependency>
<dependency>
<groupId>io.hypersistence</groupId>
<artifactId>hypersistence-utils-hibernate-55</artifactId>
<version>3.9.0</version>
</dependency>
O projeto Hypersistence Utils define uma lista de dependências opcionais que você terá que declarar explicitamente em seu projeto para poder usá-las.
A razão pela qual todas essas dependências são opcionais, como Guava, Jackson ou PostgreSQL JDBC Driver, é que nem todos os projetos podem precisar delas.
Além disso, a versão da dependência é extremamente importante porque, de tempos em tempos, podem ser descobertos problemas de segurança que são corrigidos em versões mais recentes.
Portanto, confiar nesta biblioteca para fornecer as versões de dependência é uma coisa muito perigosa de se fazer.
Por exemplo, foram descobertos 65 problemas de segurança na biblioteca Jackson Data Bind da qual este projeto depende fortemente.
Para evitar riscos de problemas de segurança, você precisa assumir a responsabilidade de atualizar constantemente todas as dependências que está usando junto com a biblioteca Hypersistence Utils.
Se você estiver usando tipos JSON, talvez esteja interessado em definir as seguintes dependências com base na sua versão do Hibernate:
< dependency >
< groupId >com.fasterxml.jackson.module</ groupId >
< artifactId >jackson-module-jakarta-xmlbind-annotations</ artifactId >
< version >${jackson-module-jakarta-xmlbind-annotation}</ version >
</ dependency >
< dependency >
< groupId >com.fasterxml.jackson.core</ groupId >
< artifactId >jackson-databind</ artifactId >
< version >${jackson-databind.version}</ version >
</ dependency >
< dependency >
< groupId >com.fasterxml.jackson.module</ groupId >
< artifactId >jackson-module-jaxb-annotations</ artifactId >
< version >${jackson-module-jaxb-annotation}</ version >
</ dependency >
Se você estiver mapeando um Range
usando Guava, será necessário fornecer explicitamente a dependência do Guava:
< dependency >
< groupId >com.google.guava</ groupId >
< artifactId >guava</ artifactId >
< version >${guava.version}</ version >
</ dependency >
Se você estiver mapeando MonetaryAmount
, será necessário fornecer explicitamente a dependência Moneta:
< dependency >
< groupId >org.javamoney</ groupId >
< artifactId >moneta</ artifactId >
< version >${moneta.version}</ version >
< type >pom</ type >
</ dependency >
Se você estiver mapeando um tipo de coluna específico do PostgreSQL (por exemplo, inet
, hstore
, array
, interval
), será necessário fornecer explicitamente a dependência do PostgreSQL:
< dependency >
< groupId >org.postgresql</ groupId >
< artifactId >postgresql</ artifactId >
< version >${postgresql.version}</ version >
</ dependency >
O JsonType
permite mapear tipos de colunas JSON, não importa se você está usando Oracle, SQL Server, PostgreSQL ou MySQL.
Se estiver usando o Hibernate 6, você pode mapear qualquer coluna JSON para a propriedade da entidade Map
, List
, POJO, String
ou JsonNode
:
@ Type ( JsonType . class )
private Map < String , String > properties = new HashMap <>();
Se estiver usando o Hibernate 5, você pode fornecer o nome completo do tipo de Hibernate:
@Type(type = "io.hypersistence.utils.hibernate.type.json.JsonType")
Ou você pode adicionar o seguinte mapeamento à sua classe package-info.java
no mesmo pacote onde suas entidades JPA estão localizadas:
@ TypeDef (
name = "json" , typeClass = JsonType . class
)
package io . hypersistence . optimizer ;
import io . hypersistence . utils . hibernate . type . json . JsonType ;
import org . hibernate . annotations . TypeDef ;
Posteriormente, você pode mapear as propriedades da entidade Map
, List
, POJO, String
ou JsonNode
para colunas JSON como esta:
@ Type ( type = "json" )
private Map < String , String > properties = new HashMap <>();
Para mais detalhes, confira este artigo.
Ao mapear um tipo de coluna JSON para
POJO
,List<POJO>
ouMap<String, POJO>
, você precisa garantir que o tipoPOJO
substitua os métodosequals
ehashCode
padrão e os implemente de acordo com o conteúdo do objeto JSON.Caso contrário, o mecanismo de verificação suja do Hibernate poderá acionar instruções UPDATE inesperadas. Confira a edição nº 134 para mais detalhes.
Ao usar o Oracle, você tem várias opções:
JsonType
genérico que pode funcionar com os tipos de coluna JSON
, VARCHAR
ou BLOB
, desde que você indique o tipo de coluna usando o atributo columnDefinition
da anotação JPA @Column
.JsonStringType
para mapear um tipo de coluna VARCHAR2
que armazena JSON.JsonBlobType
para mapear um tipo de coluna BLOB
que armazena JSON.Para mais detalhes, confira este artigo.
Ao usar o SQL Server, você pode usar o JsonType
genérico ou o JsonStringType
para mapear um tipo de coluna NVARCHAR
que armazena JSON.
Para mais detalhes, confira este artigo.
Ao usar o PostgreSQL, você pode usar o JsonType
genérico ou o JsonBinaryType
para mapear os tipos de coluna jsonb
e json
.
Para mais detalhes, confira este artigo.
Ao usar o MySQL, você pode usar o JsonType
genérico ou o JsonStringType
para mapear o tipo de coluna json
.
Para mais detalhes, confira este artigo.
JsonNode
para uma coluna JSONNo Dialect mapping for JDBC type: 1111
ao misturar tipos JSON com consultas SQL nativascolumn is of type jsonb but expression is of type record
ou bytea
issue List
Java com JPA e HibernateDuration
Java com Hibernate MonetaryAmount
com JPA e Hibernatejava.time.YearMonth
para coluna DATE ou INTEGERjava.time.Year
e java.time.Month
com JPA e HibernateCharacter
para coluna CHAR anulávelImmutableType
para simplificar implementações UserType
findAll
@Retry
para tentar novamente automaticamente em caso de falha O BaseJpaRepository
é uma alternativa muito melhor ao Spring Data JpaRepository
padrão porque não fornece um método findAll
ou um método save
que não faz sentido na terminologia JPA.
Para usar o utilitário BaseJpaRepository
, certifique-se de fornecer o atributo repositoryBaseClass
na configuração @EnableJpaRepositories
para referenciar o BaseJpaRepositoryImpl
do projeto Hypersistence Utils:
@ Configuration
@ EnableJpaRepositories (
value = "your.repository.package" ,
repositoryBaseClass = BaseJpaRepositoryImpl . class
)
public class JpaConfiguration {
...
}
O your.repository.package
é o pacote Java dos seus repositórios Spring.
Embora o BaseJpaRepository
seja preferido, caso você precise usar o JpaRepository
padrão, você pode pelo menos estender o HibernateRepository
para descontinuar os métodos que podem causar problemas.
Para usar o HibernateRepository
, certifique-se de incluir o pacote io.hypersistence.utils.spring.repository
em sua configuração @EnableJpaRepositories
:
@ Configuration
@ EnableJpaRepositories (
value = {
"io.hypersistence.utils.spring.repository" ,
"your.repository.package" ,
...
}
)
public class JpaConfiguration {
...
}
O your.repository.package
é o pacote Java dos seus repositórios Spring.
BatchSequenceGenerator
- Gerador de sequência de lote de hibernação CamelCaseToSnakeCaseNamingStrategy
- Como mapear propriedades camelCase para nomes de colunas Snake_case com Hibernate ClassImportIntegrator
– Como escrever uma consulta compacta de projeção DTO com JPAListResultTransformer
- A melhor maneira de usar um ResultTransformer do HibernateMapResultTransformer
- Como retornar um resultado de mapa de uma consulta JPA ou Hibernate SQLStatementCountValidator
- Como detectar o problema de consulta do Hibernate N+1 durante o teste SQLExtract
- Como obter a consulta SQL dos critérios JPQL ou JPAQueryStackTraceLogger
– Como encontrar a origem de uma consulta SQL gerada pelo HibernateEste projeto é Gratuito, como em Libre, não Gratis.
Não há suporte gratuito. Apenas o código-fonte e os binários estão disponíveis gratuitamente.
Se precisar de assistência com um determinado problema, você precisará adquirir os programas Coaching Basic ou Coaching Pro.
Além das opções de suporte pago, você tem a opção de fornecer sua própria solução. Para isso, aqui está o que você precisa fazer:
No entanto, devido à falta de tempo, revisarei as solicitações pull enviadas de tempos em tempos, portanto, pode ser necessário esperar vários meses até que a solicitação pull seja revisada e integrada.
Imagine ter uma ferramenta que detecte automaticamente se você está usando JPA e Hibernate corretamente. Chega de problemas de desempenho, chega de ter que gastar inúmeras horas tentando descobrir por que seu aplicativo mal está rastreando.
Imagine descobrir no início do ciclo de desenvolvimento que você está usando mapeamentos e relacionamentos de entidades abaixo do ideal ou que estão faltando configurações relacionadas ao desempenho.
Além disso, com o Hypersistence Optimizer, você pode detectar todos esses problemas durante os testes e garantir que não implantará na produção uma alteração que afetará o desempenho da camada de acesso a dados.
O Hypersistence Optimizer é a ferramenta que você esperava há muito tempo!
Se você estiver interessado em um treinamento presencial, posso oferecer meu treinamento High-Performance Java Persistence, que pode ser adaptado para um, dois ou três dias de sessões. Para mais detalhes, confira meu site.
Se você quiser que eu revise seu aplicativo e forneça informações sobre como você pode otimizá-lo para que ele seja executado mais rapidamente, confira minha página de consultoria.
Se você deseja a maneira mais rápida de aprender como acelerar um aplicativo de banco de dados Java, definitivamente deveria se inscrever em meus cursos em vídeo sobre persistência Java de alto desempenho.
Ou, se preferir ler livros, você também vai adorar meu livro High-Performance Java Persistence.
O projeto usa Maven Toolchains à medida que diferentes módulos são compilados e testados usando diferentes versões Java.
O Hypersistence Utils 6 requer Java 11 enquanto os outros módulos são compilados com Java 8.
Para ver como configurar Maven Toolchains, confira este artigo.
O projeto usa vários sistemas de banco de dados para testes de integração, e você pode definir as configurações de conexão JDBC usando as instâncias DatasourceProvider
(por exemplo, PostgreSQLDataSourceProvider
), e o projeto usa Testcontainers para inicializar um contêiner Docker com o Oracle, SQL Server, PostgreSQL ou MySQL necessário. instância sob demanda.
Se você é um contribuidor regular, é aconselhável configurar o banco de dados necessário localmente ou usar a configuração do Docker Compose fornecida na pasta
docker
, pois a inicialização dos contêineres sob demanda é mais lenta e seus testes levarão mais tempo para serem executados.
Se você quiser corrigir um problema ou adicionar suporte para um novo recurso, forneça o caso de teste de integração associado que comprove que a melhoria está funcionando conforme o esperado.