Quando atualizei a versão do Hibernate de 3.6.8 para 4.0.0, recebi um aviso sobre o método descontinuado buildSessionFactory()
nesta linha:
private static final SessionFactory sessionFactory =
new Configuration().configure().buildSessionFactory();
o Javadoc recomenda usar outro método
buildSessionFactory(ServiceRegistry serviceRegistry)
mas na documentação eu encontrei a variante obsoleta :(
Você pode me ajudar com esse pequeno mal-entendido?
java
hibernate
configuration
deprecated
bootstrapping
insistente
fonte
fonte
Respostas:
Sim, está obsoleto. Substitua seu SessionFactory pelo seguinte:
No Hibernate 4.0, 4.1, 4.2
No Hibernate 4.3, ServiceRegistryBuilder está obsoleto . Use o seguinte.
fonte
Sim, está obsoleto. http://docs.jboss.org/hibernate/core/4.0/javadocs/org/hibernate/cfg/Configuration.html#buildSessionFactory () especificamente diz para você usar o outro método que você encontrou (
buildSessionFactory(ServiceRegistry serviceRegistry)
) - então use-o.A documentação é copiada de uma versão para outra e provavelmente ainda não foi atualizada (eles não reescrevem o manual a cada versão) - portanto, confie nos Javadocs.
Os detalhes dessa alteração podem ser vistos em:
Algumas referências adicionais:
fonte
ou
fonte
Código verificado para funcionar no Hibernate 4.3.0. Observe que você pode remover o parâmetro XML filename ou fornecer seu próprio caminho lá. Isso é semelhante a (mas erros de digitação corrigidos) outras postagens aqui, mas esta está correta.
fonte
É simples assim: os documentos do JBoss não são 100% perfeitamente bem conservados. Vá com o que o JavaDoc diz :
buildSessionFactory(ServiceRegistry serviceRegistry)
.fonte
A melhor maneira de criar o objeto SessionFactory na versão mais recente do hibernate 4.3.0 em diante é a seguinte:
fonte
Não é incomum encontrar discrepâncias entre diferentes versões da documentação. A maioria dos desenvolvedores vê a documentação como uma tarefa árdua e costuma adiar.
Como regra geral, se o javadoc diz uma coisa e alguma documentação não-javadoc a contradiz, as chances são de que o javadoc seja mais preciso. É mais provável que os programadores mantenham o javadoc atualizado com as alterações no código ... porque a "fonte" do javadoc está no mesmo arquivo que o código.
No caso de
@deprecated
tags, é uma certeza virtual que o javadoc é mais preciso. Os desenvolvedores depreciam as coisas após uma cuidadosa consideração ... e (de modo geral) eles não as depreciam.fonte
System.getenv(String)
bugs.sun.com/bugdatabase/view_bug.do?bug_id=4199068Configuration.buildSessionFactory()
;)Se você estiver usando o Hibernate 5.2 e superior, poderá usar o seguinte:
fonte
TL; DR
Sim, ele é. Existem maneiras melhores de iniciar o Hibernate, como as seguintes.
Bootstrap nativo do Hibernate
O
Configuration
objeto legado é menos poderoso do que usar oBootstrapServiceRegistryBuilder
, introduzido desde o Hibernate 4:Bootstrap do JPA
Você também pode inicializar o Hibernate usando o JPA:
Dessa forma, você está construindo o em
EntityManagerFactory
vez de umSessionFactory
. No entanto, oSessionFactory
estende também oEntityManagerFactory, so the actual object that's built is a
SessionFactoryImpl`.Conclusão
Esses dois métodos de inicialização afetam o comportamento do Hibernate. Ao usar o bootstrap nativo, o Hibernate se comporta no modo legado, anterior à JPA.
Ao inicializar usando o JPA, o Hibernate se comportará de acordo com a especificação do JPA.
Existem várias diferenças entre esses dois modos:
EntityNotFoundException
, exigindo, portanto, uma verificação do banco de dados.fonte
fonte
StandardServiceRegistryBuilder
NÃO está obsoleto.public void sampleConnection () lança Exception {
fonte
Eu editei o método criado por batbaatar acima para que ele aceite o objeto Configuration como parâmetro:
Na classe principal eu fiz:
fonte
No Hibernate 4.2.2
fonte
fonte
Aqui estão muitas APIs reprovadas na estrutura principal do hibernate.
criamos a fábrica de sessões como abaixo:
SessionFactory sessionFactory = nova Configuração (). Configure (). BuildSessionFactory ();
O método buildSessionFactory foi descontinuado na versão hibernate 4 e foi substituído pela nova API. Se você estiver usando o hibernate 4.3.0 e superior, seu código deverá ser:
Configuração de configuração = new Configuration (). Configure ();
Construtor StandardServiceRegistryBuilder = new StandardServiceRegistryBuilder (). ApplySettings (configuration.getProperties ());
Fábrica SessionFactory = configuration.buildSessionFactory (builder.build ());
A classe ServiceRegistryBuilder é substituída por StandardServiceRegistryBuilder da 4.3.0. Parece que haverá muitas mudanças na versão 5.0. Ainda não há muita clareza sobre as APIs reprovadas e as alternativas adequadas para uso. Cada versão incremental apresenta uma API mais obsoleta, eles são uma maneira de ajustar a estrutura principal da versão 5.0.
fonte
Em
hibernate 5.3.1
, você pode tentar o seguinte:fonte
Se alguém aqui depois de atualizar para a 5.1 é assim que funciona
em vez do abaixo no hibernate 4.3
fonte
Apenas importe o seguinte pacote,
fonte